diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 3a986873f1..eb11fe008e 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -185,14 +185,14 @@ jobs: fi - name: Login to Dockerhub if: github.event_name != 'pull_request' && steps.docker_login.outputs.skip_dockerhub_login != 'true' - uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # pin@v4.0.0 + uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # pin@v4.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@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # pin@v4.0.0 + uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # pin@v4.1.0 with: registry: ghcr.io username: ${{ github.actor }} diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml index 26186948d0..8f54291d4f 100644 --- a/.github/workflows/qc_checks.yaml +++ b/.github/workflows/qc_checks.yaml @@ -202,7 +202,7 @@ jobs: - name: Export API Documentation run: invoke dev.schema --ignore-warnings --filename src/backend/InvenTree/schema.yml - name: Upload schema - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # pin@v7.0.1 with: name: schema.yml path: src/backend/InvenTree/schema.yml @@ -222,7 +222,7 @@ jobs: echo "Downloaded api.yaml" - name: Running OpenAPI Spec diff action id: breaking_changes - uses: oasdiff/oasdiff-action/diff@1f38ea5ea0b4a2e4e49901c3bcdf4386a05e9ea1 # pin@main + uses: oasdiff/oasdiff-action/diff@f8cb9308b42121e793f835bd14c0b8090420430c # pin@main with: base: "api.yaml" revision: "src/backend/InvenTree/schema.yml" @@ -251,17 +251,17 @@ jobs: - name: Extract settings / tags run: invoke int.export-definitions --basedir docs - name: Upload settings - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # pin@v7.0.1 with: name: inventree_settings.json path: docs/generated/inventree_settings.json - name: Upload tags - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # pin@v7.0.1 with: name: inventree_tags.yml path: docs/generated/inventree_tags.yml - name: Upload filters - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # pin@v7.0.1 with: name: inventree_filters.yml path: docs/generated/inventree_filters.yml @@ -363,7 +363,7 @@ jobs: pip install . if: needs.paths-filter.outputs.submit-performance == 'true' - name: Performance Reporting - uses: CodSpeedHQ/action@1c8ae4843586d3ba879736b7f6b7b0c990757fab # pin@v4 + uses: CodSpeedHQ/action@db35df748deb45fdef0960669f57d627c1956c30 # pin@v4 # check if we are in inventree/inventree - reporting only works in that OIDC context if: github.repository == 'inventree/InvenTree' && needs.paths-filter.outputs.submit-performance == 'true' with: @@ -409,7 +409,7 @@ jobs: - name: Coverage Tests run: invoke dev.test --check --coverage --translations - name: Upload raw coverage to artifacts - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # pin@v7.0.1 with: name: coverage path: .coverage @@ -454,7 +454,7 @@ jobs: env: node_version: '>=20.19.0' - name: Performance Reporting - uses: CodSpeedHQ/action@1c8ae4843586d3ba879736b7f6b7b0c990757fab # pin@v4 + uses: CodSpeedHQ/action@db35df748deb45fdef0960669f57d627c1956c30 # pin@v4 with: mode: walltime run: inv dev.test --pytest @@ -725,7 +725,7 @@ jobs: invoke static env INVENTREE_CUSTOM_SPLASH="img/playwright_custom_splash.png" INVENTREE_CUSTOM_LOGO="img/playwright_custom_logo.png" npx nyc playwright test --project=customization npx nyc playwright test --project=chromium --project=firefox - - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # pin@v7.0.1 if: ${{ !cancelled() && steps.tests.outcome == 'failure' }} with: name: playwright-report @@ -770,7 +770,7 @@ jobs: run: | cd src/backend/InvenTree/web/static zip -r frontend-build.zip web/ web/.vite - - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # pin@v7.0.1 with: name: frontend-build path: src/backend/InvenTree/web/static/web diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index aa77d5282c..56debc6675 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -28,7 +28,7 @@ jobs: pip install --require-hashes -r contrib/dev_reqs/requirements.txt python3 .github/scripts/version_check.py - name: Push to Stable Branch - uses: ad-m/github-push-action@77c5b412c50b723d2a4fbc6d71fb5723bcd439aa # pin@v1.0.0 + uses: ad-m/github-push-action@4cc74773234f74829a8c21bc4d69dd4be9cfa599 # pin@v1.1.0 if: env.stable_release == 'true' with: github_token: ${{ secrets.GITHUB_TOKEN }} @@ -86,7 +86,7 @@ jobs: tag: ${{ github.ref }} overwrite: true - name: Upload frontend to artifacts - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # pin@v7.0.1 with: name: frontend-build path: src/backend/InvenTree/web/static/frontend-build.zip diff --git a/.github/workflows/scorecard.yaml b/.github/workflows/scorecard.yaml index 4a0bc3ab6a..e525beeef8 100644 --- a/.github/workflows/scorecard.yaml +++ b/.github/workflows/scorecard.yaml @@ -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@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: SARIF file path: results.sarif diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a4d6e46287..afdd0795d1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -97,3 +97,4 @@ repos: rev: 0.4.3 hooks: - id: teyit + language_version: python3.11 diff --git a/.vscode/launch.json b/.vscode/launch.json index e32e7beeb8..17186b6d37 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -36,7 +36,9 @@ "program": "${workspaceFolder}/src/backend/InvenTree/manage.py", "args": [ "runserver", - "0.0.0.0:8000" + "0.0.0.0:8000", + // "--sync",// Synchronize worker tasks to foreground thread + // "--noreload", // disable auto-reload ], "django": true, "justMyCode": false diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b1d2d483f..2be3883c45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,11 +9,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Breaking Changes +### Added + +- [#11778](https://github.com/inventree/InvenTree/pull/11778) adds inline supplier part creation to po line item addition dialog. +- [#11772](https://github.com/inventree/InvenTree/pull/11772) the UI now warns if you navigate away from a note panel with unsaved changes + +### Changed + +### Removed + +## 1.3.0 - 2026-04-11 + +### Breaking Changes + - [#11303](https://github.com/inventree/InvenTree/pull/11303) removes the `default_supplier` field from the `Part` model. Instead, the `SupplierPart` model now has a `primary` field which is used to indicate which supplier is the default for a given part. Any external client applications which made use of the old `default_supplier` field will need to be updated. - [#11500](https://github.com/inventree/InvenTree/pull/11500) fixes a spelling mistake in the database configuration values, which may affect some users running the PostgreSQL database backend. The `tcp_keepalives_internal` option has been renamed to `tcp_keepalives_interval` to reflect the correct PostgreSQL configuration option name. If you are using PostgreSQL, and have set a custom value for the `tcp_keepalives_internal` option, you will need to update this to `tcp_keepalives_interval` in your configuration (either via environment variable or config file). ### Added +- [#11702](https://github.com/inventree/InvenTree/pull/11702) adds "last updated" and "updated by" fields for label and report templates, allowing users to track when a template was last modified and by whom. +- [#11685](https://github.com/inventree/InvenTree/pull/11685) exposes the data importer wizard to the plugin interface, allowing plugins to trigger the data importer wizard and perform custom data imports from the UI. +- [#11692](https://github.com/inventree/InvenTree/pull/11692) adds line item numbering for external orders (purchase, sales and return orders). This allows users to specify a line number for each line item on the order, which can be used for reference purposes. The line number is optional, and can be left blank if not required. The line number is stored as a string, to allow for more flexible formatting (e.g. "1", "1.1", "A", etc). - [#11641](https://github.com/inventree/InvenTree/pull/11641) adds support for custom parameters against the SalesOrderShipment model. - [#11527](https://github.com/inventree/InvenTree/pull/11527) adds a new API endpoint for monitoring the status of a particular background task. This endpoint allows clients to check the status of a background task and receive updates when the task is complete. This is useful for long-running tasks that may take some time to complete, allowing clients to provide feedback to users about the progress of the task. - [#11405](https://github.com/inventree/InvenTree/pull/11405) adds default table filters, which hide inactive items by default. The default table filters are overridden by user filter selection, and only apply to the table view initially presented to the user. This means that users can still view inactive items if they choose to, but they will not be shown by default. diff --git a/contrib/container/requirements.txt b/contrib/container/requirements.txt index f8236494ec..389d393530 100644 --- a/contrib/container/requirements.txt +++ b/contrib/container/requirements.txt @@ -6,9 +6,9 @@ asgiref==3.11.1 \ # via # -c src/backend/requirements.txt # django -django==5.2.12 \ - --hash=sha256:4853482f395c3a151937f6991272540fcbf531464f254a347bf7c89f53c8cff7 \ - --hash=sha256:6b809af7165c73eff5ce1c87fdae75d4da6520d6667f86401ecf55b681eb1eeb +django==5.2.13 \ + --hash=sha256:5788fce61da23788a8ce6f02583765ab060d396720924789f97fa42119d37f7a \ + --hash=sha256:a31589db5188d074c63f0945c3888fad104627dfcc236fb2b97f71f89da33bc4 # via # -c src/backend/requirements.txt # -r contrib/container/requirements.in @@ -17,15 +17,15 @@ django-auth-ldap==5.3.0 \ --hash=sha256:743d8107b146240b46f7e97207dc06cb11facc0cd70dce490b7ca09dd5643d19 \ --hash=sha256:aa880415983149b072f876d976ef8ec755a438090e176817998263a6ed9e1038 # via -r contrib/container/requirements.in -gunicorn==25.2.0 \ - --hash=sha256:10bd7adb36d44945d97d0a1fdf9a0fb086ae9c7b39e56b4dece8555a6bf4a09c \ - --hash=sha256:88f5b444d0055bf298435384af7294f325e2273fd37ba9f9ff7b98e0a1e5dfdc +gunicorn==25.3.0 \ + --hash=sha256:cacea387dab08cd6776501621c295a904fe8e3b7aae9a1a3cbb26f4e7ed54660 \ + --hash=sha256:f74e1b2f9f76f6cd1ca01198968bd2dd65830edc24b6e8e4d78de8320e2fe889 # via # -c src/backend/requirements.txt # -r contrib/container/requirements.in -invoke==2.2.1 \ - --hash=sha256:2413bc441b376e5cd3f55bb5d364f973ad8bdd7bf87e53c79de3c11bf3feecc8 \ - --hash=sha256:515bf49b4a48932b79b024590348da22f39c4942dff991ad1fb8b8baea1be707 +invoke==3.0.3 \ + --hash=sha256:437b6a622223824380bfb4e64f612711a6b648c795f565efc8625af66fb57f0c \ + --hash=sha256:f11327165e5cbb89b2ad1d88d3292b5113332c43b8553b494da435d6ec6f5053 # via # -c src/backend/requirements.txt # -r contrib/container/requirements.in diff --git a/contrib/dev_reqs/requirements.in b/contrib/dev_reqs/requirements.in index 06b0753513..c148de0a40 100644 --- a/contrib/dev_reqs/requirements.in +++ b/contrib/dev_reqs/requirements.in @@ -1,4 +1,4 @@ # Packages needed for CI/packages -requests==2.33.0 +requests==2.33.1 pyyaml==6.0.3 jc==1.25.6 diff --git a/contrib/dev_reqs/requirements.txt b/contrib/dev_reqs/requirements.txt index 9e26439b3e..526af24a49 100644 --- a/contrib/dev_reqs/requirements.txt +++ b/contrib/dev_reqs/requirements.txt @@ -6,136 +6,136 @@ certifi==2026.2.25 \ # via # -c src/backend/requirements.txt # requests -charset-normalizer==3.4.6 \ - --hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \ - --hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \ - --hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \ - --hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \ - --hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \ - --hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \ - --hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \ - --hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \ - --hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \ - --hash=sha256:1cf0a70018692f85172348fe06d3a4b63f94ecb055e13a00c644d368eb82e5b8 \ - --hash=sha256:1ed80ff870ca6de33f4d953fda4d55654b9a2b340ff39ab32fa3adbcd718f264 \ - --hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \ - --hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \ - --hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \ - --hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \ - --hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \ - --hash=sha256:2bd9d128ef93637a5d7a6af25363cf5dec3fa21cf80e68055aad627f280e8afa \ - --hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \ - --hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \ - --hash=sha256:2f7fdd9b6e6c529d6a2501a2d36b240109e78a8ceaef5687cfcfa2bbe671d297 \ - --hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \ - --hash=sha256:31215157227939b4fb3d740cd23fe27be0439afef67b785a1eb78a3ae69cba9e \ - --hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \ - --hash=sha256:3516bbb8d42169de9e61b8520cbeeeb716f12f4ecfe3fd30a9919aa16c806ca8 \ - --hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \ - --hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \ - --hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \ - --hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \ - --hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \ - --hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \ - --hash=sha256:461598cd852bfa5a61b09cae2b1c02e2efcd166ee5516e243d540ac24bfa68a7 \ - --hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \ - --hash=sha256:48696db7f18afb80a068821504296eb0787d9ce239b91ca15059d1d3eaacf13b \ - --hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \ - --hash=sha256:4d1d02209e06550bdaef34af58e041ad71b88e624f5d825519da3a3308e22687 \ - --hash=sha256:4f41da960b196ea355357285ad1316a00099f22d0929fe168343b99b254729c9 \ - --hash=sha256:517ad0e93394ac532745129ceabdf2696b609ec9f87863d337140317ebce1c14 \ - --hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \ - --hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \ - --hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \ - --hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \ - --hash=sha256:54fae94be3d75f3e573c9a1b5402dc593de19377013c9a0e4285e3d402dd3a2a \ - --hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \ - --hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \ - --hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \ - --hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \ - --hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \ - --hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \ - --hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \ - --hash=sha256:659a1e1b500fac8f2779dd9e1570464e012f43e580371470b45277a27baa7532 \ - --hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \ - --hash=sha256:69dd852c2f0ad631b8b60cfbe25a28c0058a894de5abb566619c205ce0550eae \ - --hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \ - --hash=sha256:71be7e0e01753a89cf024abf7ecb6bca2c81738ead80d43004d9b5e3f1244e64 \ - --hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \ - --hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \ - --hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \ - --hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \ - --hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \ - --hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \ - --hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \ - --hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \ - --hash=sha256:802168e03fba8bbc5ce0d866d589e4b1ca751d06edee69f7f3a19c5a9fe6b597 \ - --hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \ - --hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \ - --hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \ - --hash=sha256:8761ac29b6c81574724322a554605608a9960769ea83d2c73e396f3df896ad54 \ - --hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \ - --hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \ - --hash=sha256:8bc5f0687d796c05b1e28ab0d38a50e6309906ee09375dd3aff6a9c09dd6e8f4 \ - --hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \ - --hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \ - --hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \ - --hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \ - --hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \ - --hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \ - --hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \ - --hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \ - --hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \ - --hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \ - --hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \ - --hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \ - --hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \ - --hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \ - --hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \ - --hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \ - --hash=sha256:ab30e5e3e706e3063bc6de96b118688cb10396b70bb9864a430f67df98c61ecc \ - --hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \ - --hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \ - --hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \ - --hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \ - --hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \ - --hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \ - --hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \ - --hash=sha256:bf625105bb9eef28a56a943fec8c8a98aeb80e7d7db99bd3c388137e6eb2d237 \ - --hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \ - --hash=sha256:c45a03a4c69820a399f1dda9e1d8fbf3562eda46e7720458180302021b08f778 \ - --hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \ - --hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \ - --hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \ - --hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \ - --hash=sha256:d08ec48f0a1c48d75d0356cea971921848fb620fdeba805b28f937e90691209f \ - --hash=sha256:d1a2ee9c1499fc8f86f4521f27a973c914b211ffa87322f4ee33bb35392da2c5 \ - --hash=sha256:d5f5d1e9def3405f60e3ca8232d56f35c98fb7bf581efcc60051ebf53cb8b611 \ - --hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \ - --hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \ - --hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \ - --hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \ - --hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \ - --hash=sha256:df01808ee470038c3f8dc4f48620df7225c49c2d6639e38f96e6d6ac6e6f7b0e \ - --hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \ - --hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \ - --hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \ - --hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \ - --hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \ - --hash=sha256:e8aeb10fcbe92767f0fa69ad5a72deca50d0dca07fbde97848997d778a50c9fe \ - --hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \ - --hash=sha256:ecbbd45615a6885fe3240eb9db73b9e62518b611850fdf8ab08bd56de7ad2b17 \ - --hash=sha256:ee4ec14bc1680d6b0afab9aea2ef27e26d2024f18b24a2d7155a52b60da7e833 \ - --hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \ - --hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \ - --hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \ - --hash=sha256:f50498891691e0864dc3da965f340fada0771f6142a378083dc4608f4ea513e2 \ - --hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \ - --hash=sha256:f61aa92e4aad0be58eb6eb4e0c21acf32cf8065f4b2cae5665da756c4ceef982 \ - --hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \ - --hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \ - --hash=sha256:f98059e4fcd3e3e4e2d632b7cf81c2faae96c43c60b569e9c621468082f1d104 \ - --hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659 +charset-normalizer==3.4.7 \ + --hash=sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc \ + --hash=sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c \ + --hash=sha256:07d9e39b01743c3717745f4c530a6349eadbfa043c7577eef86c502c15df2c67 \ + --hash=sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4 \ + --hash=sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0 \ + --hash=sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c \ + --hash=sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5 \ + --hash=sha256:12a6fff75f6bc66711b73a2f0addfc4c8c15a20e805146a02d147a318962c444 \ + --hash=sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153 \ + --hash=sha256:14265bfe1f09498b9d8ec91e9ec9fa52775edf90fcbde092b25f4a33d444fea9 \ + --hash=sha256:16d971e29578a5e97d7117866d15889a4a07befe0e87e703ed63cd90cb348c01 \ + --hash=sha256:177a0ba5f0211d488e295aaf82707237e331c24788d8d76c96c5a41594723217 \ + --hash=sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b \ + --hash=sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c \ + --hash=sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a \ + --hash=sha256:1dc8b0ea451d6e69735094606991f32867807881400f808a106ee1d963c46a83 \ + --hash=sha256:1efde3cae86c8c273f1eb3b287be7d8499420cf2fe7585c41d370d3e790054a5 \ + --hash=sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7 \ + --hash=sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb \ + --hash=sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c \ + --hash=sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1 \ + --hash=sha256:2cd4a60d0e2fb04537162c62bbbb4182f53541fe0ede35cdf270a1c1e723cc42 \ + --hash=sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab \ + --hash=sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df \ + --hash=sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e \ + --hash=sha256:320ade88cfb846b8cd6b4ddf5ee9e80ee0c1f52401f2456b84ae1ae6a1a5f207 \ + --hash=sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18 \ + --hash=sha256:36836d6ff945a00b88ba1e4572d721e60b5b8c98c155d465f56ad19d68f23734 \ + --hash=sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38 \ + --hash=sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110 \ + --hash=sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18 \ + --hash=sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44 \ + --hash=sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d \ + --hash=sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48 \ + --hash=sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e \ + --hash=sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5 \ + --hash=sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d \ + --hash=sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53 \ + --hash=sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790 \ + --hash=sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c \ + --hash=sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b \ + --hash=sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116 \ + --hash=sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d \ + --hash=sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10 \ + --hash=sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6 \ + --hash=sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2 \ + --hash=sha256:6370e8686f662e6a3941ee48ed4742317cafbe5707e36406e9df792cdb535776 \ + --hash=sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a \ + --hash=sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265 \ + --hash=sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008 \ + --hash=sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943 \ + --hash=sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374 \ + --hash=sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246 \ + --hash=sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e \ + --hash=sha256:6e0d51f618228538a3e8f46bd246f87a6cd030565e015803691603f55e12afb5 \ + --hash=sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616 \ + --hash=sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15 \ + --hash=sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41 \ + --hash=sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960 \ + --hash=sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752 \ + --hash=sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e \ + --hash=sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72 \ + --hash=sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7 \ + --hash=sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8 \ + --hash=sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b \ + --hash=sha256:813c0e0132266c08eb87469a642cb30aaff57c5f426255419572aaeceeaa7bf4 \ + --hash=sha256:82b271f5137d07749f7bf32f70b17ab6eaabedd297e75dce75081a24f76eb545 \ + --hash=sha256:84c018e49c3bf790f9c2771c45e9313a08c2c2a6342b162cd650258b57817706 \ + --hash=sha256:8751d2787c9131302398b11e6c8068053dcb55d5a8964e114b6e196cf16cb366 \ + --hash=sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb \ + --hash=sha256:87fad7d9ba98c86bcb41b2dc8dbb326619be2562af1f8ff50776a39e55721c5a \ + --hash=sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e \ + --hash=sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00 \ + --hash=sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f \ + --hash=sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a \ + --hash=sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1 \ + --hash=sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66 \ + --hash=sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356 \ + --hash=sha256:a6c5863edfbe888d9eff9c8b8087354e27618d9da76425c119293f11712a6319 \ + --hash=sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4 \ + --hash=sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad \ + --hash=sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d \ + --hash=sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5 \ + --hash=sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7 \ + --hash=sha256:aef65cd602a6d0e0ff6f9930fcb1c8fec60dd2cfcb6facaf4bdb0e5873042db0 \ + --hash=sha256:af21eb4409a119e365397b2adbaca4c9ccab56543a65d5dbd9f920d6ac29f686 \ + --hash=sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34 \ + --hash=sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49 \ + --hash=sha256:bb8cc7534f51d9a017b93e3e85b260924f909601c3df002bcdb58ddb4dc41a5c \ + --hash=sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1 \ + --hash=sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e \ + --hash=sha256:bd9b23791fe793e4968dba0c447e12f78e425c59fc0e3b97f6450f4781f3ee60 \ + --hash=sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0 \ + --hash=sha256:c0f081d69a6e58272819b70288d3221a6ee64b98df852631c80f293514d3b274 \ + --hash=sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d \ + --hash=sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0 \ + --hash=sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae \ + --hash=sha256:c593052c465475e64bbfe5dbd81680f64a67fdc752c56d7a0ae205dc8aeefe0f \ + --hash=sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d \ + --hash=sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe \ + --hash=sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3 \ + --hash=sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393 \ + --hash=sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1 \ + --hash=sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af \ + --hash=sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44 \ + --hash=sha256:d61f00a0869d77422d9b2aba989e2d24afa6ffd552af442e0e58de4f35ea6d00 \ + --hash=sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c \ + --hash=sha256:dca4bbc466a95ba9c0234ef56d7dd9509f63da22274589ebd4ed7f1f4d4c54e3 \ + --hash=sha256:dd915403e231e6b1809fe9b6d9fc55cf8fb5e02765ac625d9cd623342a7905d7 \ + --hash=sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd \ + --hash=sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e \ + --hash=sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b \ + --hash=sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8 \ + --hash=sha256:e5f4d355f0a2b1a31bc3edec6795b46324349c9cb25eed068049e4f472fb4259 \ + --hash=sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859 \ + --hash=sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46 \ + --hash=sha256:e80c8378d8f3d83cd3164da1ad2df9e37a666cdde7b1cb2298ed0b558064be30 \ + --hash=sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b \ + --hash=sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46 \ + --hash=sha256:ed065083d0898c9d5b4bbec7b026fd755ff7454e6e8b73a67f8c744b13986e24 \ + --hash=sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a \ + --hash=sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24 \ + --hash=sha256:f22dec1690b584cea26fade98b2435c132c1b5f68e39f5a0b7627cd7ae31f1dc \ + --hash=sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215 \ + --hash=sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063 \ + --hash=sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832 \ + --hash=sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6 \ + --hash=sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79 \ + --hash=sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464 # via # -c src/backend/requirements.txt # requests @@ -230,9 +230,9 @@ pyyaml==6.0.3 \ # via # -c src/backend/requirements.txt # -r contrib/dev_reqs/requirements.in -requests==2.33.0 \ - --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ - --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 +requests==2.33.1 \ + --hash=sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517 \ + --hash=sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a # via # -c src/backend/requirements.txt # -r contrib/dev_reqs/requirements.in diff --git a/docs/docs/app/settings.md b/docs/docs/app/settings.md index d415dce933..5c6e7815c7 100644 --- a/docs/docs/app/settings.md +++ b/docs/docs/app/settings.md @@ -77,7 +77,7 @@ The *Part Settings* view allows you to configure various options governing what | Option | Description | | --- | --- | -| Parameters | Enable display of part parameters in the part detail view | +| Parameters | Enable display of 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/concepts/parameters.md b/docs/docs/concepts/parameters.md index ca44989dab..47e42cec97 100644 --- a/docs/docs/concepts/parameters.md +++ b/docs/docs/concepts/parameters.md @@ -15,7 +15,7 @@ Parameters can be associated with various InvenTree models. Any model which supports parameters will have a "Parameters" tab on its detail page. This tab displays all parameters associated with that object: -{{ image("concepts/parameter-tab.png", "Part Parameters Example") }} +{{ image("concepts/parameter-tab.png", "Parameters Example") }} ## Parameter Templates @@ -40,9 +40,9 @@ Parameter templates are created and edited via the [admin interface](../settings To create a template: - Navigate to the "Settings" page -- Click on the "Part Parameters" tab +- Click on the "Parameters" tab - Click on the "New Parameter" button -- Fill out the `Create Part Parameter Template` form: `Name` (required) and `Units` (optional) fields +- Fill out the `Create Parameter Template` form: `Name` (required) and `Units` (optional) fields - Click on the "Submit" button. An existing template can be edited by clicking on the "Edit" button associated with that template: @@ -53,9 +53,9 @@ An existing template can be edited by clicking on the "Edit" button associated w After [creating a template](#create-template) or using the existing templates, you can add parameters to any part. -To add a parameter, navigate to a specific part detail page, click on the "Parameters" tab then click on the "New Parameters" button, the `Create Part Parameter` form will be displayed: +To add a parameter, navigate to a specific part detail page, click on the "Parameters" tab then click on the "New Parameters" button, the `Create Parameter` form will be displayed: -{{ image("part/create_part_parameter.png", "Create Part Parameter Form") }} +{{ image("part/create_part_parameter.png", "Create Parameter Form") }} Select the parameter `Template` you would like to use for this parameter, fill-out the `Data` field (value of this specific parameter) and click the "Submit" button. @@ -132,7 +132,7 @@ The in-built conversion functionality means that parameter values can be input i ### Incompatible Units -If a part parameter is created with a value which is incompatible with the units specified for the template, it will be rejected: +If a parameter is created with a value which is incompatible with the units specified for the template, it will be rejected: {{ image("part/part_invalid_units.png", "Invalid Parameter Units") }} @@ -151,4 +151,4 @@ Selection Lists can be used to add a large number of predefined values to a para It is possible that plugins lock selection lists to ensure a known state. -Administration of lists can be done through the Part Parameter section in the [Admin Center](../settings/admin.md#admin-center) or via the API. +Administration of lists can be done through the `Parameter` section in the [Admin Center](../settings/admin.md#admin-center) or via the API. diff --git a/docs/docs/concepts/units.md b/docs/docs/concepts/units.md index ce71012455..9e1c1a50d7 100644 --- a/docs/docs/concepts/units.md +++ b/docs/docs/concepts/units.md @@ -8,7 +8,7 @@ Support for real-world "physical" units of measure is implemented using the [pin - 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 +- Enforce use of compatible units when creating parameters - Enable custom units as required ### Unit Conversion @@ -61,7 +61,7 @@ The [supplier part](../part/index.md/#supplier-parts) model uses real-world unit ### Parameter -The [parameter template](../concepts/parameters.md#parameter-templates) model can specify units of measure, and part parameters can be specified against these templates with compatible units +The [parameter template](../concepts/parameters.md#parameter-templates) model can specify units of measure, and parameters can be specified against these templates with compatible units ## Custom Units diff --git a/docs/docs/develop/devcontainer.md b/docs/docs/develop/devcontainer.md index a7d2f8e1f6..a1d9721943 100644 --- a/docs/docs/develop/devcontainer.md +++ b/docs/docs/develop/devcontainer.md @@ -60,7 +60,12 @@ If you only need a superuser, run the `superuser` task. It should prompt you for #### 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. +If you need to process your queue with background workers, open a new terminal and run the `worker` task with `invoke worker`. This is a foreground task which will execute in the terminal. + +If you are developing functions that will be executed by background workers there are a two debugging options. + +- If the workers are started with the `worker` task you can add `print` or `logger` statements to the code and monitor the output in the terminal. +- All tasks can be forced to run in the foreground worker by uncommenting the `--sync` and `--noreload` arguments under the `InvenTree Server - 3rd party` entry in `.vscode/launch.json`. With this setting you should not start a separate background worker, instead you start the `InvenTree Server - 3rd party` from the `Run and Debug` side panel. All task will now run in one single process and you can set breakpoints, inspect variables and single step also tasks that normally are offloaded to background workers. It should be noted that with this setting the GUI will be unresponsive while tasks are executed. ### Running InvenTree diff --git a/docs/docs/hooks.py b/docs/docs/hooks.py index 2cd00cd586..b038738565 100644 --- a/docs/docs/hooks.py +++ b/docs/docs/hooks.py @@ -280,9 +280,27 @@ def on_post_build(*args, **kwargs): ignored_settings = { 'global': ['SERVER_RESTART_REQUIRED'], 'user': ['LAST_USED_PRINTING_MACHINES'], + 'config': [ + 'INVENTREE_DB_TCP_KEEPALIVES', + 'INVENTREE_DB_TCP_KEEPALIVES_IDLE', + 'INVENTREE_DB_TCP_KEEPALIVES_INTERVAL', + 'INVENTREE_DB_TCP_KEEPALIVES_COUNT', + 'INVENTREE_DB_ISOLATION_SERIALIZABLE', + 'INVENTREE_DB_WAL_MODE', + 'INVENTREE_PLUGIN_DIR', + 'INVENTREE_DOCKER', + 'INVENTREE_FLAGS', + 'INVENTREE_REMOTE_LOGIN', + 'INVENTREE_REMOTE_LOGIN_HEADER', + 'TEST_TRANSLATIONS', + 'INVENTREE_FRONTEND_URL_BASE', + 'INVENTREE_FRONTEND_API_HOST', + 'INVENTREE_FRONTEND_SETTINGS', + 'INVENTREE_LOGOUT_REDIRECT_URL', + ], } - for group in ['global', 'user']: + for group in ['global', 'user', 'config']: expected = expected_settings.get(group, {}) observed = observed_settings.get(group, {}) ignored = ignored_settings.get(group, []) diff --git a/docs/docs/part/create.md b/docs/docs/part/create.md index d9b984e0e6..9aaa06e55e 100644 --- a/docs/docs/part/create.md +++ b/docs/docs/part/create.md @@ -20,7 +20,7 @@ New parts can be created manually by selecting the *Create Part* option from the {{ image("part/part_create_form.png", "New part form") }} -Fill out the required part parameters and then press *Submit* to create the new part. If there are any form errors, you must fix these before the form can be successfully submitted. +Fill out the required attributes and then press *Submit* to create the new part. If there are any form errors, you must fix these before the form can be successfully submitted. Once the form is completed, the browser window is redirected to the new part detail page. diff --git a/docs/docs/part/index.md b/docs/docs/part/index.md index e4848ece1f..076da58b25 100644 --- a/docs/docs/part/index.md +++ b/docs/docs/part/index.md @@ -81,7 +81,7 @@ Parts can be locked to prevent them from being modified. This is useful for part - Locked parts cannot be deleted - BOM items cannot be created, edited, or deleted when they are part of a locked assembly -- Part parameters linked to a locked part cannot be created, edited or deleted +- Parameters linked to a locked part cannot be created, edited or deleted ## Active Parts diff --git a/docs/docs/plugins/frontend.md b/docs/docs/plugins/frontend.md index 0df93fd49d..550a604590 100644 --- a/docs/docs/plugins/frontend.md +++ b/docs/docs/plugins/frontend.md @@ -10,6 +10,9 @@ Plugins can inherit from the [UserInterfaceMixin](./mixins/ui.md) class to provi Note that the [InvenTree plugin creator](./creator.md) can be used to scaffold a new plugin with the necessary structure for frontend integration. This will automatically set up the necessary files and configurations to get started with frontend development. +!!! info "Simplified Development" + Using the plugin creator can significantly simplify the process of developing a frontend plugin, as it provides a ready-made template with the necessary configurations for building and integrating the frontend code. Rolling your own frontend plugin from scratch is possible, but it requires a good understanding of the InvenTree frontend architecture and build process. + ## Frontend Architecture When designing a frontend plugin component, it is important to have at least a basic understanding of the InvenTree frontend architecture. @@ -76,20 +79,28 @@ The following properties are available in the `context` object: | Property | Description | | -------- | ----------- | | `version` | An object containing the current InvenTree version information. | +| `api` | The Axios instance configured to communicate with the InvenTree API. | +| `queryClient` | The query client instance used for managing API calls in the frontend. | | `user` | An object containing information about the currently logged-in user. | +| `userSettings` | An object containing user-specific settings. | +| `globalSettings` | An object containing global settings for the InvenTree instance. | +| `modelInformation` | An object containing information about the models available in the InvenTree instance. | +| `renderInstance` | A function to render a model instance | | `host` | An object containing information about the current host (server) configuration. | | `i18n` | An object containing internationalization (i18n) functions for translating text. | | `locale` | The current locale being used for the user interface. | -| `api` | The Axios instance configured to communicate with the InvenTree API. | -| `queryClient` | The query client instance used for managing API calls in the frontend. | | `navigate` | A function to navigate to a different page in the InvenTree web interface. | -| `globalSettings` | An object containing global settings for the InvenTree instance. | -| `userSettings` | An object containing user-specific settings. | -| `modelInformation` | An object containing information about the models available in the InvenTree instance. | -| `renderInstance` | A function to render a model instance | | `theme` | The current Mantine theme being used in the InvenTree web interface. | | `colorScheme` | The current color scheme being used in the InvenTree web interface. | | `forms` | A set of functional components for rendering forms in the InvenTree web interface. | +| `tables` | A set of functional components for rendering tables in the InvenTree web interface. | +| `importer` | A set of functions for controlling the global importer drawer in the InvenTree web interface. | +| `model` | The model type associated with the rendered component (if applicable). | +| `id` | The ID (primary key) of the model instance being rendered (if applicable). | +| `instance` | The model instance data (if available). | +| `reloadContent` | A function which can be called to reload the plugin content. | +| `reloadInstance` | A function which can be called to reload the model instance. | +| `context` | Any additional context data which may be passed to the plugin. | This set of components is passed through at render time to the plugin function, allowing the plugin code to hook directly into the InvenTree web interface and access the necessary context for rendering. diff --git a/docs/docs/plugins/install.md b/docs/docs/plugins/install.md index 3d18d58850..6f2f9f5fd6 100644 --- a/docs/docs/plugins/install.md +++ b/docs/docs/plugins/install.md @@ -74,6 +74,9 @@ Enter the package name into the form as shown below. You can add a path and a ve {{ image("plugin/plugin_install_txt.png", "Plugin.txt file") }} +!!! info "Superuser Required" + Only users with superuser privileges can manage plugins via the web interface. + #### Local Directory Custom plugins can be placed in the `data/plugins/` directory, where they will be automatically discovered. This can be useful for developing and testing plugins, but can prove more difficult in production (e.g. when using Docker). diff --git a/docs/docs/plugins/mixins/event.md b/docs/docs/plugins/mixins/event.md index c2f048b055..f3f61a0d1e 100644 --- a/docs/docs/plugins/mixins/event.md +++ b/docs/docs/plugins/mixins/event.md @@ -13,6 +13,9 @@ When a certain (server-side) event occurs, the background worker passes the even {{ image("plugin/enable_events.png", "Enable event integration") }} +!!! info "Worker debugging" + As the events are offloaded to a background worker debugging the `process_event()` function need some extra consideration. Please see the [Run background workers](../../develop/devcontainer.md#run-background-workers) section for further information. + ## Events Events are passed through using a string identifier, e.g. `build.completed` diff --git a/docs/docs/plugins/test.md b/docs/docs/plugins/test.md index 775da49c03..a1eddd8912 100644 --- a/docs/docs/plugins/test.md +++ b/docs/docs/plugins/test.md @@ -9,11 +9,10 @@ For complicated plugins it makes sense to add unit tests the code to ensure that For plugin testing the following environment variables must be set to True: -| Name | Function | Value | -| ---- | -------- | ----- | -| INVENTREE_PLUGINS_ENABLED | Enables the use of 3rd party plugins | True | -| INVENTREE_PLUGIN_TESTING | Enables enables all plugins no matter of their active state in the db or built-in flag | True | -| INVENTREE_PLUGIN_TESTING_SETUP | Enables the url mixin | True | +{{ configtable() }} +{{ configsetting("INVENTREE_PLUGINS_ENABLED") }} Enables the use of 3rd party plugins | +{{ configsetting("INVENTREE_PLUGIN_TESTING") }} Enables enables all plugins no matter of their active state in the db or built-in flag | +{{ configsetting("INVENTREE_PLUGIN_TESTING_SETUP") }} Enables the url mixin | ### Test Program diff --git a/docs/docs/report/helpers.md b/docs/docs/report/helpers.md index 79fde22b2f..c8811f561c 100644 --- a/docs/docs/report/helpers.md +++ b/docs/docs/report/helpers.md @@ -173,8 +173,144 @@ Generate a list of all active customers: More advanced database filtering should be achieved using a [report plugin](../plugins/mixins/report.md), and adding custom context data to the report template. +## List Helpers + +The following helper functions are available for working with list (or list-like) data structures: + +### length + +Return the length of a list (or list-like) data structure. Note that this will also work for other data structures which support the `len()` function, such as strings, dictionaries or querysets: + +::: report.templatetags.report.length + options: + show_docstring_description: false + show_source: False + +### first + +Return the first element of a list (or list-like) data structure: + +::: report.templatetags.report.first + options: + show_docstring_description: false + show_source: False + + +### last + +Return the last element of a list (or list-like) data structure: + +::: report.templatetags.report.last + options: + show_docstring_description: false + show_source: False + +### reverse + +Return a list (or list-like) data structure in reverse order: + +::: report.templatetags.report.reverse + options: + show_docstring_description: false + show_source: False + +### truncate + +Return a truncated version of a list (or list-like) data structure, containing only the first N elements: + +::: report.templatetags.report.truncate + options: + show_docstring_description: false + show_source: False + +## String Formatting + +### strip + +Return a string with leading and trailing whitespace removed: + +::: report.templatetags.report.strip + options: + show_docstring_description: false + show_source: False + + +### lstrip + +Return a string with leading whitespace removed: + +::: report.templatetags.report.lstrip + options: + show_docstring_description: false + show_source: False + +### rstrip + +Return a string with trailing whitespace removed: + +::: report.templatetags.report.rstrip + options: + show_docstring_description: false + show_source: False + +### split + +Return a list of substrings by splitting a string based on a specified separator: + +::: report.templatetags.report.split + options: + show_docstring_description: false + show_source: False + +### join + +Return a string by joining a list of strings into a single string, using a specified separator: + +::: report.templatetags.report.join + options: + show_docstring_description: false + show_source: False + +### replace + +Return a string where occurrences of a specified substring are replaced with another substring: + +::: report.templatetags.report.replace + options: + show_docstring_description: false + show_source: False + +### lowercase + +Return a string with all characters converted to lowercase: + +::: report.templatetags.report.lowercase + options: + show_docstring_description: false + show_source: False + +### uppercase + +Return a string with all characters converted to uppercase: + +::: report.templatetags.report.uppercase + options: + show_docstring_description: false + show_source: False + +### titlecase + +Return a string with the first character of each word converted to uppercase and the remaining characters converted to lowercase: + +::: report.templatetags.report.titlecase + options: + show_docstring_description: false + show_source: False + ## Number Formatting +A number of helper functions are available for formatting numbers in a particular way. These can be used to format numbers according to a particular number of decimal places, or to add leading zeros, for example. + ### format_number The helper function `format_number` allows for some common number formatting options. It takes a number (or a number-like string) as an input, as well as some formatting arguments. It returns a *string* containing the formatted number: @@ -547,14 +683,18 @@ You can add asset images to the reports and labels by using the `{% raw %}{% ass ## Parameters -If you need to load a parameter value for a particular model instance, within the context of your template, you can use the `parameter` template tag: +If you need to reference a parameter for a particular model instance, within the context of your template, you can use the `parameter` template tag: + +### parameter + +This returns a [Parameter](../concepts/parameters.md) object which contains the value of the parameter, as well as any associated metadata (e.g. units, description, etc). ::: report.templatetags.report.parameter options: show_docstring_description: false show_source: False -### Example +#### Example The following example assumes that you have a report or label which contains a valid [Part](../part/index.md) instance: @@ -580,6 +720,27 @@ A [Parameter](../concepts/parameters.md) has the following available attributes: | Units | The *units* of the parameter (e.g. "km") | | Template | A reference to a [ParameterTemplate](../concepts/parameters.md#parameter-templates) | +### parameter_value + +To access just the value of a parameter, use the `parameter_value` template tag: + +::: report.templatetags.report.parameter_value + options: + show_docstring_description: false + show_source: False + +#### Example + +``` +{% raw %} +{% load report %} + +{% parameter_value part "length" backup_value="3"as length_value %} +Part: {{ part.name }}
+Length: {{ length_value }} +{% endraw %} +``` + ## Rendering Markdown Some data fields (such as the *Notes* field available on many internal database models) support [markdown formatting](https://en.wikipedia.org/wiki/Markdown). To render markdown content in a custom report, there are template filters made available through the [django-markdownify](https://github.com/erwinmatijsen/django-markdownify) library. This library provides functionality for converting markdown content to HTML representation, allowing it to be then rendered to PDF by the InvenTree report generation pipeline. diff --git a/docs/docs/settings/SSO.md b/docs/docs/settings/SSO.md index 62849500b1..ab7d3a539c 100644 --- a/docs/docs/settings/SSO.md +++ b/docs/docs/settings/SSO.md @@ -29,10 +29,10 @@ The first step is to ensure that the required provider modules are installed, vi There are two variables in the configuration file which define the operation of SSO: -| Environment Variable |Configuration File | Description | More Info | -| --- | --- | --- | --- | -| INVENTREE_SOCIAL_BACKENDS | `social_backends` | A *list* of provider backends enabled for the InvenTree instance | [django-allauth docs](https://docs.allauth.org/en/latest/installation/quickstart.html) | -| INVENTREE_SOCIAL_PROVIDERS | `social_providers` | A *dict* of settings specific to the installed providers | [provider documentation](https://docs.allauth.org/en/latest/socialaccount/providers/index.html) | +{{ configtable() }} +{{ configsetting("INVENTREE_SOCIAL_BACKENDS") }} A *list* of [social provider backends](https://docs.allauth.org/en/latest/installation/quickstart.html) enabled for the InvenTree instance | +{{ configsetting("INVENTREE_SOCIAL_PROVIDERS") }} A *dict* of settings specific to the [installed providers](https://docs.allauth.org/en/latest/socialaccount/providers/index.html) | + In the example below, SSO provider modules are activated for *google*, *github* and *microsoft*. Specific configuration options are specified for the *microsoft* provider module: diff --git a/docs/docs/settings/error_codes.md b/docs/docs/settings/error_codes.md index bf388e7f2b..b04849927d 100644 --- a/docs/docs/settings/error_codes.md +++ b/docs/docs/settings/error_codes.md @@ -216,6 +216,11 @@ This warning will not prevent you from restoring the backup but it is recommende A user is logged in with elevated privileges. This might be a superuser or a administrator user. These types of users have elevated permissions and should not be used for regular usage. Use separate accounts for administrative tasks and regular usage to reduce risk. Make sure to review the [permission documentation](../settings/permissions.md#dangerous-user-flags). +#### INVE-W15 +**Process interrupted by user - Backend** + +A process was interrupted by the user, likely by a keyboard interrupt. This might lead to issues with the process that was interrupted, as it might not have completed its task. This is especially relevant for processes that are not idempotent or that do not have a good rollback mechanism. + ### INVE-I (InvenTree Information) Information — These are not errors but information messages. They might point out potential issues or just provide information. diff --git a/docs/docs/settings/global.md b/docs/docs/settings/global.md index 66dddda681..c729c61bb4 100644 --- a/docs/docs/settings/global.md +++ b/docs/docs/settings/global.md @@ -27,6 +27,8 @@ Configuration of basic server settings: {{ globalsetting("INVENTREE_INSTANCE_TITLE") }} {{ globalsetting("INVENTREE_INSTANCE_ID", default="Randomly generated value") }} {{ globalsetting("INVENTREE_ANNOUNCE_ID") }} +{{ globalsetting("INVENTREE_SHOW_SUPERUSER_BANNER") }} +{{ globalsetting("INVENTREE_SHOW_ADMIN_BANNER") }} {{ globalsetting("INVENTREE_RESTRICT_ABOUT") }} {{ globalsetting("DISPLAY_FULL_NAMES") }} {{ globalsetting("DISPLAY_PROFILE_INFO") }} diff --git a/docs/docs/start/advanced.md b/docs/docs/start/advanced.md index 14d8af5a3c..9bacc83924 100644 --- a/docs/docs/start/advanced.md +++ b/docs/docs/start/advanced.md @@ -51,46 +51,44 @@ You can link your InvenTree server to an LDAP server. Next you can start configuring the connection. Either use the config file or set the environment variables. -| config key | ENV Variable | Description | -| --- | --- | --- | -| `ldap.enabled` | `INVENTREE_LDAP_ENABLED` | Set this to `True` to enable LDAP. | -| `ldap.debug` | `INVENTREE_LDAP_DEBUG` | Set this to `True` to activate debug mode, useful for troubleshooting ldap configurations. | -| `ldap.server_uri` | `INVENTREE_LDAP_SERVER_URI` | LDAP Server URI, e.g. `ldaps://example.org` | -| `ldap.start_tls` | `INVENTREE_LDAP_START_TLS` | Enable TLS encryption over the standard LDAP port, [see](https://django-auth-ldap.readthedocs.io/en/latest/reference.html#auth-ldap-start-tls). (You can set TLS options via `ldap.global_options`) | -| `ldap.bind_dn` | `INVENTREE_LDAP_BIND_DN` | LDAP bind dn, e.g. `cn=admin,dc=example,dc=org` | -| `ldap.bind_password` | `INVENTREE_LDAP_BIND_PASSWORD` | LDAP bind password | -| `ldap.search_base_dn` | `INVENTREE_LDAP_SEARCH_BASE_DN` | LDAP search base dn, e.g. `cn=Users,dc=example,dc=org` | -| `ldap.user_dn_template` | `INVENTREE_LDAP_USER_DN_TEMPLATE` | use direct bind as auth user, `ldap.bind_dn` and `ldap.bin_password` is not necessary then, e.g. `uid=%(user)s,dc=example,dc=org` | -| `ldap.global_options` | `INVENTREE_LDAP_GLOBAL_OPTIONS` | set advanced options as dict, e.g. TLS settings. For a list of all available options, see [python-ldap docs](https://www.python-ldap.org/en/latest/reference/ldap.html#ldap-options). (keys and values starting with OPT_ get automatically converted to `python-ldap` keys) | -| `ldap.search_filter_str`| `INVENTREE_LDAP_SEARCH_FILTER_STR` | LDAP search filter str, default: `uid=%(user)s` | -| `ldap.user_attr_map` | `INVENTREE_LDAP_USER_ATTR_MAP` | LDAP <-> InvenTree user attribute map, can be json if used as env, in yml directly specify the object. default: `{"first_name": "givenName", "last_name": "sn", "email": "mail"}` | -| `ldap.always_update_user` | `INVENTREE_LDAP_ALWAYS_UPDATE_USER` | Always update the user on each login, default: `true` | -| `ldap.cache_timeout` | `INVENTREE_LDAP_CACHE_TIMEOUT` | cache timeout to reduce traffic with LDAP server, default: `3600` (1h) | -| `ldap.group_search` | `INVENTREE_LDAP_GROUP_SEARCH` | Base LDAP DN for group searching; required to enable group features | -| `ldap.group_object_class` | `INVENTREE_LDAP_GROUP_OBJECT_CLASS` | The string to pass to the LDAP group search `(objectClass=<...>)`, default: `groupOfUniqueNames` | -| `ldap.mirror_groups` | `INVENTREE_LDAP_MIRROR_GROUPS` | If `True`, mirror a user's LDAP group membership in the Django database, default: `False` | -| `ldap.group_type_class` | `INVENTREE_LDAP_GROUP_TYPE_CLASS` | The group class to be imported from `django_auth_ldap.config` as a string, default: `'GroupOfUniqueNamesType'`| -| `ldap.group_type_class_args` | `INVENTREE_LDAP_GROUP_TYPE_CLASS_ARGS` | A `list` of positional args to pass to the LDAP group type class, default `[]` | -| `ldap.group_type_class_kwargs` | `INVENTREE_LDAP_GROUP_TYPE_CLASS_KWARGS` | A `dict` of keyword args to pass to the LDAP group type class, default `{'name_attr': 'cn'}` | -| `ldap.require_group` | `INVENTREE_LDAP_REQUIRE_GROUP` | If set, users _must_ be in this group to log in to InvenTree | -| `ldap.deny_group` | `INVENTREE_LDAP_DENY_GROUP` | If set, users _must not_ be in this group to log in to InvenTree | -| `ldap.user_flags_by_group` | `INVENTREE_LDAP_USER_FLAGS_BY_GROUP` | LDAP group to InvenTree user flag map, can be json if used as env, in yml directly specify the object. See config template for example, default: `{}` | +{{ configtable() }} +{{ configsetting("INVENTREE_LDAP_ENABLED") }} Enable LDAP support | +{{ configsetting("INVENTREE_LDAP_DEBUG") }} Set this to `True` to activate debug mode, useful for troubleshooting ldap configurations. | +| `INVENTREE_LDAP_SERVER_URI` | `ldap.server_uri` | LDAP Server URI, e.g. `ldaps://example.org` | +| `INVENTREE_LDAP_START_TLS` | `ldap.start_tls` | Enable TLS encryption over the standard LDAP port, [see](https://django-auth-ldap.readthedocs.io/en/latest/reference.html#auth-ldap-start-tls). (You can set TLS options via `ldap.global_options`) | +| `INVENTREE_LDAP_BIND_DN` | `ldap.bind_dn` | LDAP bind dn, e.g. `cn=admin,dc=example,dc=org` | +| `INVENTREE_LDAP_BIND_PASSWORD` | `ldap.bind_password` | LDAP bind password | +| `INVENTREE_LDAP_SEARCH_BASE_DN` | `ldap.search_base_dn` | LDAP search base dn, e.g. `cn=Users,dc=example,dc=org` | +| `INVENTREE_LDAP_USER_DN_TEMPLATE` | `ldap.user_dn_template` | use direct bind as auth user, `ldap.bind_dn` and `ldap.bin_password` is not necessary then, e.g. `uid=%(user)s,dc=example,dc=org` | +| `INVENTREE_LDAP_GLOBAL_OPTIONS` | `ldap.global_options` | set advanced options as dict, e.g. TLS settings. For a list of all available options, see [python-ldap docs](https://www.python-ldap.org/en/latest/reference/ldap.html#ldap-options). (keys and values starting with OPT_ get automatically converted to `python-ldap` keys) | +| `INVENTREE_LDAP_SEARCH_FILTER_STR`| `ldap.search_filter_str` | LDAP search filter str, default: `uid=%(user)s` | +| `INVENTREE_LDAP_USER_ATTR_MAP` | `ldap.user_attr_map` | LDAP <-> InvenTree user attribute map, can be json if used as env, in yml directly specify the object. default: `{"first_name": "givenName", "last_name": "sn", "email": "mail"}` | +| `INVENTREE_LDAP_ALWAYS_UPDATE_USER` | `ldap.always_update_user` | Always update the user on each login, default: `true` | +| `INVENTREE_LDAP_CACHE_TIMEOUT` | `ldap.cache_timeout` | cache timeout to reduce traffic with LDAP server, default: `3600` (1h) | +| `INVENTREE_LDAP_GROUP_SEARCH` | `ldap.group_search` | Base LDAP DN for group searching; required to enable group features | +| `INVENTREE_LDAP_GROUP_OBJECT_CLASS` | `ldap.group_object_class` | The string to pass to the LDAP group search `(objectClass=<...>)`, default: `groupOfUniqueNames` | +| `INVENTREE_LDAP_MIRROR_GROUPS` | `ldap.mirror_groups` | If `True`, mirror a user's LDAP group membership in the Django database, default: `False` | +| `INVENTREE_LDAP_GROUP_TYPE_CLASS` | `ldap.group_type_class` | The group class to be imported from `django_auth_ldap.config` as a string, default: `'GroupOfUniqueNamesType'`| +| `INVENTREE_LDAP_GROUP_TYPE_CLASS_ARGS` | `ldap.group_type_class_args` | A `list` of positional args to pass to the LDAP group type class, default `[]` | +| `INVENTREE_LDAP_GROUP_TYPE_CLASS_KWARGS` | `ldap.group_type_class_kwargs` | A `dict` of keyword args to pass to the LDAP group type class, default `{'name_attr': 'cn'}` | +| `INVENTREE_LDAP_REQUIRE_GROUP` | `ldap.require_group` | If set, users _must_ be in this group to log in to InvenTree | +| `INVENTREE_LDAP_DENY_GROUP` | `ldap.deny_group` | If set, users _must not_ be in this group to log in to InvenTree | +| `INVENTREE_LDAP_USER_FLAGS_BY_GROUP` | `ldap.user_flags_by_group` | LDAP group to InvenTree user flag map, can be json if used as env, in yml directly specify the object. See config template for example, default: `{}` | ## Tracing support Starting with 0.14.0 InvenTree supports sending traces, logs and metrics to OpenTelemetry compatible endpoints (both HTTP and gRPC). A [list of vendors](https://opentelemetry.io/ecosystem/vendors) is available on the project site. This can be used to track usage and performance of the InvenTree backend and connected services like databases, caches and more. -| config key | ENV Variable | Description | -| --- | --- | --- | -| `tracing.enabled` | `INVENTREE_TRACING_ENABLED` | Set this to `True` to enable OpenTelemetry. | -| `tracing.endpoint` | `INVENTREE_TRACING_ENDPOINT` | General endpoint for information (not specific trace/log url) | -| `tracing.headers` | `INVENTREE_TRACING_HEADERS` | HTTP headers that should be send with every request (often used for authentication). Format as a dict. | -| `tracing.auth.basic` | `INVENTREE_TRACING_AUTH_BASIC` | Auth headers that should be send with every requests (will be encoded to b64 and overwrite auth headers) | -| `tracing.is_http` | `INVENTREE_TRACING_IS_HTTP` | Are the endpoints HTTP (True, default) or gRPC (False) | -| `tracing.append_http` | `INVENTREE_TRACING_APPEND_HTTP` | Append default url routes (v1) to `tracing.endpoint` | -| `tracing.console` | `INVENTREE_TRACING_CONSOLE` | Print out all exports (additionally) to the console for debugging. Do not use in production | -| `tracing.resources` | `INVENTREE_TRACING_RESOURCES` | Add additional resources to all exports. This can be used to add custom tags to the traces. Format as a dict. | +{{ configtable() }} +{{ configsetting("INVENTREE_TRACING_ENABLED") }} Enable OpenTelemetry | +{{ configsetting("INVENTREE_TRACING_ENDPOINT") }} General endpoint for information (not specific trace/log url) | +{{ configsetting("INVENTREE_TRACING_HEADERS") }} HTTP headers that should be send with every request (often used for authentication). Format as a dict. | +{{ configsetting("INVENTREE_TRACING_AUTH") }} Auth headers that should be send with every requests (will be encoded to b64 and overwrite auth headers) | +{{ configsetting("INVENTREE_TRACING_IS_HTTP") }} Are the endpoints HTTP (True, default) or gRPC (False) | +{{ configsetting("INVENTREE_TRACING_APPEND_HTTP") }} Append default url routes (v1) to `tracing.endpoint` | +{{ configsetting("INVENTREE_TRACING_CONSOLE") }} Print out all exports (additionally) to the console for debugging. Do not use in production | +{{ configsetting("INVENTREE_TRACING_RESOURCES") }} Add additional resources to all exports. This can be used to add custom tags to the traces. Format as a dict. | ## Multi Site Support @@ -99,7 +97,6 @@ If your InvenTree instance is used in a multi-site environment, you can enable m !!! tip "Django Documentation" For more information on multi-site support, refer to the [Django documentation]({% include "django.html" %}/ref/contrib/sites/). -| Environment Variable | Config Key | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_SITE_MULTI | site_multi | Enable multiple sites | False | -| INVENTREE_SITE_ID | site_id | Specify a fixed site ID | _Not specified_ | +{{ configtable() }} +{{ configsetting("INVENTREE_SITE_MULTI") }} Enable multiple sites | +{{ configsetting("INVENTREE_SITE_ID") }} Specify a fixed site ID | diff --git a/docs/docs/start/backup.md b/docs/docs/start/backup.md index e96cc0088a..fb6ae5f9c9 100644 --- a/docs/docs/start/backup.md +++ b/docs/docs/start/backup.md @@ -17,19 +17,19 @@ The django-dbbackup library provides [multiple configuration options](https://ar The following configuration options are available for backup: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_BACKUP_STORAGE | backup_storage | Backup storage backend. Refer to the [storage backend documentation](#storage-backend). | django.core.files.storage.FileSystemStorage | -| INVENTREE_BACKUP_DIR | backup_dir | Backup storage directory. | *No default* | -| INVENTREE_BACKUP_OPTIONS | backup_options | Specific options for the selected storage backend (dict) | *No default* | -| INVENTREE_BACKUP_CONNECTOR_OPTIONS | backup_connector_options | Specific options for the database connector (dict). Refer to the [database connector options](#database-connector). | *No default* | -| INVENTREE_BACKUP_SEND_EMAIL | backup_send_email | If True, an email is sent to the site admin when an error occurs during a backup or restore procedure. | False | -| INVENTREE_BACKUP_EMAIL_PREFIX | backup_email_prefix | Prefix for the subject line of backup-related emails. | `[InvenTree Backup]` | -| INVENTREE_BACKUP_GPG_RECIPIENT | backup_gpg_recipient | Specify GPG recipient if using encryption for backups. | *No default* | -| INVENTREE_BACKUP_DATE_FORMAT | backup_date_format | Date format string used to format timestamps in backup filenames. | `%Y-%m-%d-%H%M%S` | -| INVENTREE_BACKUP_DATABASE_FILENAME_TEMPLATE | backup_database_filename_template | Template string used to generate database backup filenames. | `InvenTree-db-{datetime}.{extension}` | -| INVENTREE_BACKUP_MEDIA_FILENAME_TEMPLATE | backup_media_filename_template | Template string used to generate media backup filenames. | `InvenTree-media-{datetime}.{extension}` | -| INVENTREE_BACKUP_RESTORE_ALLOW_NEWER_VERSION | backup_restore_allow_newer_version | If True, allows restoring a backup created with a newer version of InvenTree. This is dangerous as it can lead to hard-to-debug data loss. | False | +{{ configtable() }} +{{ configsetting("INVENTREE_BACKUP_STORAGE") }} Backup storage backend. Refer to the [storage backend documentation](#storage-backend). | +{{ configsetting("INVENTREE_BACKUP_DIR") }} Backup storage directory. | +{{ configsetting("INVENTREE_BACKUP_OPTIONS") }} Specific options for the selected storage backend (dict) | +{{ configsetting("INVENTREE_BACKUP_CONNECTOR_OPTIONS") }} Specific options for the database connector (dict). Refer to the [database connector options](#database-connector) | +{{ configsetting("INVENTREE_BACKUP_SEND_EMAIL") }} If True, an email is sent to the site admin when an error occurs during a backup or restore procedure. | +{{ configsetting("INVENTREE_BACKUP_EMAIL_PREFIX") }} Prefix for the subject line of backup-related emails. | +{{ configsetting("INVENTREE_BACKUP_GPG_RECIPIENT") }} Specify GPG recipient if using encryption for backups. | +{{ configsetting("INVENTREE_BACKUP_DATE_FORMAT") }} Date format string used to format timestamps in backup filenames. | +{{ configsetting("INVENTREE_BACKUP_DATABASE_FILENAME_TEMPLATE") }} Template string used to generate database backup filenames. +{{ configsetting("INVENTREE_BACKUP_MEDIA_FILENAME_TEMPLATE") }} Template string used to generate media backup filenames. | +{{ configsetting("INVENTREE_BACKUP_RESTORE_ALLOW_NEWER_VERSION") }} If True, allows restoring a backup created with a newer version of InvenTree. This is dangerous as it can lead to hard-to-debug data loss. | + ### Storage Backend diff --git a/docs/docs/start/config.md b/docs/docs/start/config.md index b25dfc1a98..25b7fd6639 100644 --- a/docs/docs/start/config.md +++ b/docs/docs/start/config.md @@ -46,6 +46,9 @@ Environment variable settings generally use the `INVENTREE_` prefix, and are all !!! warning "Available Variables" Some configuration options cannot be set via environment variables. Refer to the documentation below. +!!! info "Environment Variable Priority" + Note that a provided environment variable will override the value provided in the configuration file. + #### List Values To specify a list value in an environment variable, use a comma-separated list. For example, to specify a list of trusted origins: @@ -58,14 +61,13 @@ INVENTREE_TRUSTED_ORIGINS='https://inventree.example.com:8443,https://stock.exam The following basic options are available: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_SITE_URL | site_url | Specify a fixed site URL | *Not specified* | -| INVENTREE_TIMEZONE | timezone | Server timezone | UTC | -| INVENTREE_ADMIN_ENABLED | admin_enabled | Enable the [django administrator interface]({% include "django.html" %}/ref/contrib/admin/) | True | -| INVENTREE_ADMIN_URL | admin_url | URL for accessing [admin interface](../settings/admin.md) | admin | -| INVENTREE_LANGUAGE | language | Default language | en-us | -| INVENTREE_AUTO_UPDATE | auto_update | Database migrations will be run automatically | False | +{{ configtable() }} +{{ configsetting("INVENTREE_SITE_URL") }} Specify a fixed site URL | +{{ configsetting("INVENTREE_TIMEZONE") }} Server timezone | +{{ configsetting("INVENTREE_ADMIN_ENABLED") }} Enable the [django administrator interface]({% include "django.html" %}/ref/contrib/admin/) | +{{ configsetting("INVENTREE_ADMIN_URL") }} URL for accessing [admin interface](../settings/admin.md) | +{{ configsetting("INVENTREE_LANGUAGE") }} Default language | +{{ configsetting("INVENTREE_AUTO_UPDATE") }} Database migrations will be run automatically | ### Site URL @@ -89,18 +91,17 @@ With "auto update" enabled, the InvenTree server will automatically apply databa The following debugging / logging options are available: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_DEBUG | debug | Enable [debug mode](./index.md#debug-mode) | False | -| INVENTREE_DEBUG_QUERYCOUNT | debug_querycount | Enable support for [django-querycount](../develop/index.md#django-querycount) middleware. | False | -| INVENTREE_DEBUG_SILK | debug_silk | Enable support for [django-silk](../develop/index.md#django-silk) profiling tool. | False | -| INVENTREE_DEBUG_SILK_PROFILING | debug_silk_profiling | Enable detailed profiling in django-silk | False | -| INVENTREE_DB_LOGGING | db_logging | Enable logging of database messages | False | -| INVENTREE_LOG_LEVEL | log_level | Set level of logging to terminal | WARNING | -| INVENTREE_JSON_LOG | json_log | log as json | False | -| INVENTREE_WRITE_LOG | write_log | Enable writing of log messages to file at config base | False | -| INVENTREE_CONSOLE_LOG | console_log | Enable logging to console | True | -| INVENTREE_SCHEMA_LEVEL | schema.level | Set level of added schema extensions detail (0-3) 0 = including no additional detail | 0 | +{{ configtable() }} +{{ configsetting("INVENTREE_DEBUG") }} Enable [debug mode](./index.md#debug-mode) | +{{ configsetting("INVENTREE_DB_LOGGING") }} Enable logging of database messages | +{{ configsetting("INVENTREE_LOG_LEVEL") }} Set level of logging to terminal | +{{ configsetting("INVENTREE_JSON_LOG") }} Log messages as json | +{{ configsetting("INVENTREE_WRITE_LOG") }} Enable writing of log messages to file at config base | +{{ configsetting("INVENTREE_CONSOLE_LOG") }} Enable logging to console | +{{ configsetting("INVENTREE_SCHEMA_LEVEL") }} Set level of added schema extensions detail (0-3) 0 = including no additional detail | +{{ configsetting("INVENTREE_DEBUG_QUERYCOUNT") }} Enable support for [django-querycount](../develop/index.md#django-querycount) middleware. | +{{ configsetting("INVENTREE_DEBUG_SILK") }} Enable support for [django-silk](../develop/index.md#django-silk) profiling tool. | +| `INVENTREE_DEBUG_SILK_PROFILING` | `debug_silk_profiling` | False | Enable detailed profiling in django-silk | ### Debug Mode @@ -118,26 +119,24 @@ Depending on how your InvenTree installation is configured, you will need to pay !!! danger "Not Secure" Allowing access from any host is not secure, and should be adjusted for your installation. -!!! info "Environment Variables" - Note that a provided environment variable will override the value provided in the configuration file. - !!! success "INVENTREE_SITE_URL" If you have specified the `INVENTREE_SITE_URL`, this will automatically be used as a trusted CSRF and CORS host (see below). -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_ALLOWED_HOSTS | allowed_hosts | List of allowed hosts | `*` | -| INVENTREE_TRUSTED_ORIGINS | trusted_origins | List of trusted origins. Refer to the [django documentation]({% include "django.html" %}/ref/settings/#csrf-trusted-origins) | Uses the *INVENTREE_SITE_URL* parameter, if set. Otherwise, an empty list. | -| INVENTREE_CORS_ORIGIN_ALLOW_ALL | cors.allow_all | Allow all remote URLS for CORS checks | `False` | -| INVENTREE_CORS_ORIGIN_WHITELIST | cors.whitelist | List of whitelisted CORS URLs. Refer to the [django-cors-headers documentation](https://github.com/adamchainz/django-cors-headers#cors_allowed_origins-sequencestr) | Uses the *INVENTREE_SITE_URL* parameter, if set. Otherwise, an empty list. | -| INVENTREE_CORS_ORIGIN_REGEX | cors.regex | List of regular expressions for CORS whitelisted URL patterns | *Empty list* | -| INVENTREE_CORS_ALLOW_CREDENTIALS | cors.allow_credentials | Allow cookies in cross-site requests | `True` | -| INVENTREE_SITE_LAX_PROTOCOL | site_lax_protocol | Ignore protocol mismatches on INVE-E7 site checks | `True` | -| INVENTREE_USE_X_FORWARDED_HOST | use_x_forwarded_host | Use forwarded host header | `False` | -| INVENTREE_USE_X_FORWARDED_PORT | use_x_forwarded_port | Use forwarded port header | `False` | -| INVENTREE_USE_X_FORWARDED_PROTO | use_x_forwarded_proto | Use forwarded protocol header | `False` | -| INVENTREE_SESSION_COOKIE_SECURE | cookie.secure | Enforce secure session cookies | `False` | -| INVENTREE_COOKIE_SAMESITE | cookie.samesite | Session cookie mode. Must be one of `Strict | Lax | None | False`. Refer to the [mozilla developer docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie) and the [django documentation]({% include "django.html" %}/ref/settings/#std-setting-SESSION_COOKIE_SAMESITE) for more information. | False | +{{ configtable() }} +{{ configsetting("INVENTREE_ALLOWED_HOSTS") }} List of allowed hosts | +{{ configsetting("INVENTREE_TRUSTED_ORIGINS", default="Uses the *INVENTREE_SITE_URL* parameter, if set. Otherwise, an empty list.") }} List of trusted origins. Refer to the [django documentation]({% include "django.html" %}/ref/settings/#csrf-trusted-origins) | +{{ configsetting("INVENTREE_CORS_ORIGIN_ALLOW_ALL") }} Allow all remote URLS for CORS checks | +{{ configsetting("INVENTREE_CORS_ORIGIN_WHITELIST", default="Uses the *INVENTREE_SITE_URL* parameter, if set. Otherwise, an empty list.") }} List of whitelisted CORS URLs. Refer to the [django-cors-headers documentation](https://github.com/adamchainz/django-cors-headers#cors_allowed_origins-sequencestr) | +{{ configsetting("INVENTREE_CORS_ORIGIN_REGEX") }} List of regular expressions for CORS whitelisted URL patterns | +{{ configsetting("INVENTREE_CORS_ALLOW_CREDENTIALS") }} Allow cookies in cross-site requests | +{{ configsetting("INVENTREE_SITE_LAX_PROTOCOL") }} Ignore protocol mismatches on INVE-E7 site checks | +{{ configsetting("INVENTREE_USE_X_FORWARDED_HOST") }} Use forwarded host header | +{{ configsetting("INVENTREE_USE_X_FORWARDED_PORT") }} Use forwarded port header | +{{ configsetting("INVENTREE_USE_X_FORWARDED_PROTO") }} Use forwarded protocol header | +| `INVENTREE_X_FORWARDED_PROTO_NAME` | `x_forwarded_proto_name` | `HTTP_X_FORWARDED_PROTO` | Name of the header to use for forwarded protocol information | +{{ configsetting("INVENTREE_SESSION_COOKIE_SECURE") }} Enforce secure session cookies | +{{ configsetting("INVENTREE_COOKIE_SAMESITE") }} Session cookie mode. Must be one of `Strict | Lax | None | False`. Refer to the [mozilla developer docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie) and the [django documentation]({% include "django.html" %}/ref/settings/#std-setting-SESSION_COOKIE_SAMESITE) for more information. | + ### Debug Mode @@ -191,10 +190,9 @@ Django provides a powerful [administrator interface]({% include "django.html" %} The following admin site configuration options are available: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_ADMIN_ENABLED | admin_enabled | Enable the django administrator interface | True | -| INVENTREE_ADMIN_URL | admin_url | URL for accessing the admin interface | admin | +{{ configtable() }} +{{ configsetting("INVENTREE_ADMIN_ENABLED") }} Enable the django administrator interface | +{{ configsetting("INVENTREE_ADMIN_URL") }} URL for accessing the admin interface | !!! warning "Security" Changing the admin URL is a simple way to improve security, but it is not a substitute for proper security practices. @@ -203,12 +201,11 @@ The following admin site configuration options are available: An administrator account can be specified using the following environment variables: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_ADMIN_USER | admin_user | Admin account username | *Not specified* | -| INVENTREE_ADMIN_PASSWORD | admin_password | Admin account password | *Not specified* | -| INVENTREE_ADMIN_PASSWORD_FILE | admin_password_file | Admin account password file | *Not specified* | -| INVENTREE_ADMIN_EMAIL | admin_email |Admin account email address | *Not specified* | +{{ configtable() }} +{{ configsetting("INVENTREE_ADMIN_USER") }} Admin account username | +{{ configsetting("INVENTREE_ADMIN_PASSWORD") }} Admin account password | +{{ configsetting("INVENTREE_ADMIN_PASSWORD_FILE") }} Admin account password file | +{{ configsetting("INVENTREE_ADMIN_EMAIL") }} Admin account email address | You can either specify the password directly using `INVENTREE_ADMIN_PASSWORD`, or you can specify a file containing the password using `INVENTREE_ADMIN_PASSWORD_FILE` (this is useful for nix users). @@ -238,12 +235,11 @@ A PEM-encoded file containing the oidc private key can be passed via the environ If not specified via environment variables, the fallback files (automatically generated as part of InvenTree installation) will be used. -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_SECRET_KEY | secret_key | Raw secret key value | *Not specified* | -| INVENTREE_SECRET_KEY_FILE | secret_key_file | File containing secret key value | *Not specified* | -| INVENTREE_OIDC_PRIVATE_KEY | oidc_private_key | Raw private key value | *Not specified* | -| INVENTREE_OIDC_PRIVATE_KEY_FILE | oidc_private_key_file | File containing private key value in PEM format | *Not specified* | +{{ configtable() }} +{{ configsetting("INVENTREE_SECRET_KEY") }} Raw secret key value | +{{ configsetting("INVENTREE_SECRET_KEY_FILE") }} File containing secret key value | +{{ configsetting("INVENTREE_OIDC_PRIVATE_KEY") }} Raw private key value | +{{ configsetting("INVENTREE_OIDC_PRIVATE_KEY_FILE", default="oidc.pem") }} File containing private key value in PEM format | ## Database Options @@ -253,14 +249,14 @@ Database options are specified under the *database* heading in the configuration The following database options can be configured: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_DB_ENGINE | database.ENGINE | Database backend | *Not specified* | -| INVENTREE_DB_NAME | database.NAME | Database name | *Not specified* | -| INVENTREE_DB_USER | database.USER | Database username (if required) | *Not specified* | -| INVENTREE_DB_PASSWORD | database.PASSWORD | Database password (if required) | *Not specified* | -| INVENTREE_DB_HOST | database.HOST | Database host address (if required) | *Not specified* | -| INVENTREE_DB_PORT | database.PORT | Database host port (if required) | *Not specified* | +{{ configtable() }} +{{ configsetting("INVENTREE_DB_ENGINE") }} Database backend | +{{ configsetting("INVENTREE_DB_NAME") }} Database name | +{{ configsetting("INVENTREE_DB_USER") }} Database username (if required) | +{{ configsetting("INVENTREE_DB_PASSWORD") }} Database password (if required) | +{{ configsetting("INVENTREE_DB_HOST") }} Database host address (if required) | +{{ configsetting("INVENTREE_DB_PORT") }} Database host port (if required) | +{{ configsetting("INVENTREE_DB_OPTIONS") }} Additional database options (as a JSON object) | !!! tip "Database Password" The value specified for `INVENTREE_DB_PASSWORD` should not contain comma `,` or colon `:` characters, otherwise the connection to the database may fail. @@ -269,22 +265,20 @@ The following database options can be configured: If running with a PostgreSQL database backend, the following additional options are available: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_DB_TIMEOUT | database.timeout | Database connection timeout (s) | 2 | -| INVENTREE_DB_TCP_KEEPALIVES | database.tcp_keepalives | TCP keepalive | 1 | -| INVENTREE_DB_TCP_KEEPALIVES_IDLE | database.tcp_keepalives_idle | Idle TCP keepalive | 1 | -| INVENTREE_DB_TCP_KEEPALIVES_INTERVAL | database.tcp_keepalives_interval | TCP keepalive interval | 1| -| INVENTREE_DB_TCP_KEEPALIVES_COUNT | database.tcp_keepalives_count | TCP keepalive count | 5 | -| INVENTREE_DB_ISOLATION_SERIALIZABLE | database.serializable | Database isolation level configured to "serializable" | False | +{{ configtable() }} +{{ configsetting("INVENTREE_DB_TIMEOUT", default="2") }} Database connection timeout (s) | +| `INVENTREE_DB_TCP_KEEPALIVES` | database.tcp_keepalives | 1 | TCP keepalive | +| `INVENTREE_DB_TCP_KEEPALIVES_IDLE` | database.tcp_keepalives_idle | 1 | Idle TCP keepalive | +| `INVENTREE_DB_TCP_KEEPALIVES_INTERVAL` | database.tcp_keepalives_interval | 1| TCP keepalive interval | +| `INVENTREE_DB_TCP_KEEPALIVES_COUNT` | database.tcp_keepalives_count | 5 | TCP keepalive count | +| `INVENTREE_DB_ISOLATION_SERIALIZABLE` | database.serializable | False | Database isolation level configured to "serializable" | ### MySQL Settings If running with a MySQL database backend, the following additional options are available: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_DB_ISOLATION_SERIALIZABLE | database.serializable | Database isolation level configured to "serializable" | False | +{{ configtable() }} +| `INVENTREE_DB_ISOLATION_SERIALIZABLE` | database.serializable | False | Database isolation level configured to "serializable" | ### SQLite Settings @@ -293,10 +287,9 @@ If running with a MySQL database backend, the following additional options are a If running with a SQLite database backend, the following additional options are available: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_DB_TIMEOUT | database.timeout | Database connection timeout (s) | 10 | -| INVENTREE_DB_WAL_MODE | database.wal_mode | Enable Write-Ahead Logging (WAL) mode for SQLite databases | True | +{{ configtable() }} +{{ configsetting("INVENTREE_DB_TIMEOUT", default="10") }} Database connection timeout (s) | +| `INVENTREE_DB_WAL_MODE` | database.wal_mode | True | Enable Write-Ahead Logging (WAL) mode for SQLite databases | ## Caching @@ -314,20 +307,21 @@ Enabling global caching requires connection to a redis server (which is separate The following cache settings are available: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_CACHE_ENABLED | cache.enabled | Enable redis caching | False | -| INVENTREE_CACHE_HOST | cache.host | Cache server host | *Not specified* | -| INVENTREE_CACHE_PORT | cache.port | Cache server port | 6379 | -| INVENTREE_CACHE_PASSWORD | cache.password | Cache server password | none | -| INVENTREE_CACHE_USER | cache.user | Cache server username | none | -| INVENTREE_CACHE_CONNECT_TIMEOUT | cache.connect_timeout | Cache connection timeout (seconds) | 3 | -| INVENTREE_CACHE_TIMEOUT | cache.timeout | Cache timeout (seconds) | 3 | -| INVENTREE_CACHE_TCP_KEEPALIVE | cache.tcp_keepalive | Cache TCP keepalive | True | -| INVENTREE_CACHE_KEEPALIVE_COUNT | cache.keepalive_count | Cache keepalive count | 5 | -| INVENTREE_CACHE_KEEPALIVE_IDLE | cache.keepalive_idle | Cache keepalive idle | 1 | -| INVENTREE_CACHE_KEEPALIVE_INTERVAL | cache.keepalive_interval | Cache keepalive interval | 1 | -| INVENTREE_CACHE_USER_TIMEOUT | cache.user_timeout | Cache user timeout | 1000 | +{{ configtable() }} +{{ configsetting("INVENTREE_CACHE_ENABLED") }} Enable redis caching | +{{ configsetting("INVENTREE_CACHE_HOST") }} Cache server host | +{{ configsetting("INVENTREE_CACHE_PORT") }} Cache server port | +{{ configsetting("INVENTREE_CACHE_PASSWORD") }} Cache server password | +{{ configsetting("INVENTREE_CACHE_USER") }} Cache server username | +{{ configsetting("INVENTREE_CACHE_DB") }} Cache server database index | +{{ configsetting("INVENTREE_CACHE_CONNECT_TIMEOUT") }} Cache connection timeout (seconds) | +{{ configsetting("INVENTREE_CACHE_TIMEOUT") }} Cache timeout (seconds) | +{{ configsetting("INVENTREE_CACHE_TCP_KEEPALIVE") }} Cache TCP keepalive | +{{ configsetting("INVENTREE_CACHE_KEEPALIVE_COUNT") }} Cache keepalive count | +{{ configsetting("INVENTREE_CACHE_KEEPALIVE_IDLE") }} Cache keepalive idle | +{{ configsetting("INVENTREE_CACHE_KEEPALIVE_INTERVAL") }} Cache keepalive interval | +{{ configsetting("INVENTREE_CACHE_USER_TIMEOUT") }} Cache user timeout | + !!! tip "Cache Password" The value specified for `INVENTREE_CACHE_PASSWORD` should not contain comma `,` or colon `:` characters, otherwise the connection to the cache server may fail. @@ -338,17 +332,16 @@ To enable [email functionality](../settings/email.md), email settings must be co The following email settings are available: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_EMAIL_BACKEND | email.backend | Email backend module | django.core.mail.backends.smtp.EmailBackend | -| INVENTREE_EMAIL_HOST | email.host | Email server host | *Not specified* | -| INVENTREE_EMAIL_PORT | email.port | Email server port | 25 | -| INVENTREE_EMAIL_USERNAME | email.username | Email account username | *Not specified* | -| INVENTREE_EMAIL_PASSWORD | email.password | Email account password | *Not specified* | -| INVENTREE_EMAIL_TLS | email.tls | Enable STARTTLS support (commonly port 567) | False | -| INVENTREE_EMAIL_SSL | email.ssl | Enable legacy SSL/TLS support (commonly port 465) | False | -| INVENTREE_EMAIL_SENDER | email.sender | Sending email address | *Not specified* | -| INVENTREE_EMAIL_PREFIX | email.prefix | Prefix for subject text | [InvenTree] | +{{ configtable() }} +{{ configsetting("INVENTREE_EMAIL_BACKEND") }} Email backend module | +{{ configsetting("INVENTREE_EMAIL_HOST") }} Email server host | +{{ configsetting("INVENTREE_EMAIL_PORT") }} Email server port | +{{ configsetting("INVENTREE_EMAIL_USERNAME") }} Email account username | +{{ configsetting("INVENTREE_EMAIL_PASSWORD") }} Email account password | +{{ configsetting("INVENTREE_EMAIL_TLS") }} Enable STARTTLS support (commonly port 567) | +{{ configsetting("INVENTREE_EMAIL_SSL") }} Enable legacy SSL/TLS support (commonly port 465) | +{{ configsetting("INVENTREE_EMAIL_SENDER") }} Sending email address | +{{ configsetting("INVENTREE_EMAIL_PREFIX") }} Prefix for subject text | ### Email Backend @@ -365,11 +358,10 @@ The "sender" email address is the address from which InvenTree emails are sent ( InvenTree requires some external directories for storing files: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_STATIC_ROOT | static_root | [Static files](./processes.md#static-files) directory | *Not specified* | -| INVENTREE_MEDIA_ROOT | media_root | [Media files](./processes.md#media-files) directory | *Not specified* | -| INVENTREE_BACKUP_DIR | backup_dir | Backup files directory | *Not specified* | +{{ configtable() }} +{{ configsetting("INVENTREE_STATIC_ROOT") }} [Static files](./processes.md#static-files) directory | +{{ configsetting("INVENTREE_MEDIA_ROOT") }} [Media files](./processes.md#media-files) directory | +{{ configsetting("INVENTREE_BACKUP_DIR") }} Directory for backup files | !!! tip "Serving Files" Read the [proxy server documentation](./processes.md#proxy-server) for more information on hosting *static* and *media* files @@ -403,43 +395,41 @@ Alternatively this location can be specified with the `INVENTREE_BACKUP_DIR` env It is also possible to use alternative storage backends for static and media files, at the moment there is direct provide direct support bundled for S3 and SFTP. Google cloud storage and Azure blob storage would also be supported by the [used library](https://django-storages.readthedocs.io), but require additional packages to be installed. -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_STORAGE_TARGET | storage.target | Storage target to use for static and media files, valid options: local, s3, sftp | local | +{{ configtable() }} +{{ configsetting("INVENTREE_STORAGE_TARGET") }} Storage target to use for static and media files, valid options: local, s3, sftp | + #### S3 -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_S3_ACCESS_KEY | storage.s3.access_key | Access key | *Not specified* | -| INVENTREE_S3_SECRET_KEY | storage.s3.secret_key | Secret key | *Not specified* | -| INVENTREE_S3_BUCKET_NAME | storage.s3.bucket_name | Bucket name, required by most providers | *Not specified* | -| INVENTREE_S3_REGION_NAME | storage.s3.region_name | S3 region name | *Not specified* | -| INVENTREE_S3_ENDPOINT_URL | storage.s3.endpoint_url | Custom S3 endpoint URL, defaults to AWS endpoints if not set | *Not specified* | -| INVENTREE_S3_LOCATION | storage.s3.location | Sub-Location that should be used | inventree-server | -| INVENTREE_S3_DEFAULT_ACL | storage.s3.default_acl | Default ACL for uploaded files, defaults to provider default if not set | *Not specified* | -| INVENTREE_S3_VERIFY_SSL | storage.s3.verify_ssl | Verify SSL certificate for S3 endpoint | True | -| INVENTREE_S3_OVERWRITE | storage.s3.overwrite | Overwrite existing files in S3 bucket | False | -| INVENTREE_S3_VIRTUAL | storage.s3.virtual | Use virtual addressing style - by default False -> `path` style, `virtual` style if True | False | +{{ configtable() }} +| `INVENTREE_S3_ACCESS_KEY` | storage.s3.access_key | *Not specified* | Access key | +| `INVENTREE_S3_SECRET_KEY` | storage.s3.secret_key | *Not specified* | Secret key | +| `INVENTREE_S3_BUCKET_NAME` | storage.s3.bucket_name | *Not specified* | Bucket name, required by most providers | +| `INVENTREE_S3_REGION_NAME` | storage.s3.region_name | *Not specified* | S3 region name | +| `INVENTREE_S3_ENDPOINT_URL` | storage.s3.endpoint_url | *Not specified* | Custom S3 endpoint URL, defaults to AWS endpoints if not set | +| `INVENTREE_S3_LOCATION` | storage.s3.location | inventree-server | Sub-Location that should be used | +| `INVENTREE_S3_DEFAULT_ACL` | storage.s3.default_acl | *Not specified* | Default ACL for uploaded files, defaults to provider default if not set | +| `INVENTREE_S3_VERIFY_SSL` | storage.s3.verify_ssl | True | Verify SSL certificate for S3 endpoint | +| `INVENTREE_S3_OVERWRITE` | storage.s3.overwrite | False | Overwrite existing files in S3 bucket | +| `INVENTREE_S3_VIRTUAL` | storage.s3.virtual | False | Use virtual addressing style - by default False -> `path` style, `virtual` style if True | #### SFTP -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_SFTP_HOST | storage.sftp.host | SFTP host | *Not specified* | -| INVENTREE_SFTP_PARAMS | storage.sftp.params | SFTP connection parameters, see https://docs.paramiko.org/en/latest/api/client.html#paramiko.client.SSHClient.connect; e.g. `{'port': 22, 'user': 'usr', 'password': 'pwd'}` | *Not specified* | -| INVENTREE_SFTP_UID | storage.sftp.uid | SFTP user ID - not required | *Not specified* | -| INVENTREE_SFTP_GID | storage.sftp.gid | SFTP group ID - not required | *Not specified* | -| INVENTREE_SFTP_LOCATION | storage.sftp.location | Sub-Location that should be used | inventree-server | +{{ configtable() }} +| `INVENTREE_SFTP_HOST` | storage.sftp.host | *Not specified* | SFTP host | +| `INVENTREE_SFTP_PARAMS` | storage.sftp.params | *Not specified* | SFTP connection parameters, see https://docs.paramiko.org/en/latest/api/client.html#paramiko.client.SSHClient.connect; e.g. `{'port': 22, 'user': 'usr', 'password': 'pwd'}` | +| `INVENTREE_SFTP_UID` | storage.sftp.uid | *Not specified* | SFTP user ID - not required | +| `INVENTREE_SFTP_GID` | storage.sftp.gid | *Not specified* | SFTP group ID - not required | +| `INVENTREE_SFTP_LOCATION` | storage.sftp.location | inventree-server | Sub-Location that should be used | ## Authentication InvenTree provides allowance for additional sign-in options. The following options are not enabled by default, and care must be taken by the system administrator when configuring these settings. -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_MFA_ENABLED | mfa_enabled | Enable or disable multi-factor authentication support for the InvenTree server | True | -| INVENTREE_MFA_SUPPORTED_TYPES | mfa_supported_types | List of supported multi-factor authentication types | recovery_codes,totp,webauthn | +{{ configtable() }} +{{ configsetting("INVENTREE_MFA_ENABLED") }} Enable multi-factor authentication support for the InvenTree server | +{{ configsetting("INVENTREE_MFA_SUPPORTED_TYPES") }} List of supported multi-factor authentication types | +{{ configsetting("INVENTREE_USE_JWT") }} Enable support for JSON Web Tokens (JWT) for authentication | ### Single Sign On @@ -454,11 +444,10 @@ There are multiple configuration parameters which must be specified (either in y The login-experience can be altered with the following settings: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_LOGIN_CONFIRM_DAYS | login_confirm_days | Duration for which confirmation links are valid | 3 | -| INVENTREE_LOGIN_ATTEMPTS | login_attempts | Count of allowed login attempts before blocking user | 5 | -| INVENTREE_LOGIN_DEFAULT_HTTP_PROTOCOL | login_default_protocol | Default protocol to use for login callbacks (e.g. using [SSO](#single-sign-on)) | Uses the protocol specified in `INVENTREE_SITE_URL`, or defaults to *http* | +{{ configtable() }} +{{ configsetting("INVENTREE_LOGIN_CONFIRM_DAYS") }} Duration for which confirmation links are valid | +{{ configsetting("INVENTREE_LOGIN_ATTEMPTS") }} Count of allowed login attempts before blocking user | +{{ configsetting("INVENTREE_LOGIN_DEFAULT_HTTP_PROTOCOL", default="Uses the protocol specified in `INVENTREE_SITE_URL`, or defaults to *http*") }} Default protocol to use for login callbacks (e.g. using [SSO](#single-sign-on)) | !!! tip "Default Protocol" If you have specified `INVENTREE_SITE_URL`, the default protocol will be used from that setting. Otherwise, the default protocol will be *http*. @@ -471,22 +460,20 @@ Custom authentication backends can be used by specifying them here. These can fo The following options are available for configuring the InvenTree [background worker process](./processes.md#background-worker): -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_BACKGROUND_WORKERS | background.workers | Number of background worker processes | 1 | -| INVENTREE_BACKGROUND_TIMEOUT | background.timeout | Timeout for background worker tasks (seconds) | 90 | -| INVENTREE_BACKGROUND_RETRY | background.retry | Time to wait before retrying a background task (seconds) | 300 | -| INVENTREE_BACKGROUND_MAX_ATTEMPTS | background.max_attempts | Maximum number of attempts for a background task | 5 | +{{ configtable() }} +{{ configsetting("INVENTREE_BACKGROUND_WORKERS") }} Number of background worker processes | +{{ configsetting("INVENTREE_BACKGROUND_TIMEOUT") }} Timeout for background worker tasks (seconds) | +{{ configsetting("INVENTREE_BACKGROUND_RETRY") }} Time to wait before retrying a background task (seconds) | +{{ configsetting("INVENTREE_BACKGROUND_MAX_ATTEMPTS") }} Maximum number of attempts for a background task | ## Sentry Integration The InvenTree server can be integrated with the [sentry.io](https://sentry.io) monitoring service, for error logging and performance tracking. -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_SENTRY_ENABLED | sentry_enabled | Enable sentry.io integration | False | -| INVENTREE_SENTRY_DSN | sentry_dsn | Sentry DSN (data source name) key | *Defaults to InvenTree developer key* | -| INVENTREE_SENTRY_SAMPLE_RATE | sentry_sample_rate | How often to send data samples | 0.1 | +{{ configtable() }} +{{ configsetting("INVENTREE_SENTRY_ENABLED") }} Enable sentry.io integration | +{{ configsetting("INVENTREE_SENTRY_DSN", default="Defaults to InvenTree developer key") }} Sentry DSN (data source name) key | +{{ configsetting("INVENTREE_SENTRY_SAMPLE_RATE") }} How often to send data samples (seconds) | !!! info "Default DSN" If enabled with the default DSN, server errors will be logged to a sentry.io account monitored by the InvenTree developers. @@ -495,13 +482,11 @@ The InvenTree server can be integrated with the [sentry.io](https://sentry.io) m The logo and custom messages can be changed/set: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_CUSTOM_LOGO | customize.logo | Path to custom logo in the static files directory | *Not specified* | -| INVENTREE_CUSTOM_SPLASH | customize.splash | Path to custom splash screen in the static files directory | *Not specified* | -| INVENTREE_CUSTOMIZE | customize.site_header | Custom site header in the Django admin | InvenTree Admin | -| INVENTREE_CUSTOMIZE | customize.login_message | Custom message for login page | *Not specified* | -| INVENTREE_CUSTOMIZE | customize.navbar_message | Custom message for navbar | *Not specified* | +{{ configtable() }} +{{ configsetting("INVENTREE_CUSTOM_LOGO") }} Path to custom logo in the static files directory | +{{ configsetting("INVENTREE_CUSTOM_SPLASH") }} Path to custom splash screen in the static files directory | +{{ configsetting("INVENTREE_SITE_HEADER") }} Custom header text for the django admin page | +{{ configsetting("INVENTREE_CUSTOMIZE") }} JSON object containing custom messages for the login page, navbar, and Django admin site | The INVENTREE_CUSTOMIZE environment variable must contain a json object with the keys from the table above and the wanted values. Example: @@ -535,7 +520,6 @@ Set the `INVENTREE_FRONTEND_SETTINGS` Environment variable to a JSON object or u | `url_compatibility` | Support compatibility with "legacy" URLs? | `true` | | `sentry_dsn` | Set a Sentry DSN url | *Not specified* | | `mobile_mode` | Controls if InvenTree web UI can be used by mobile devices. There are 3 options: `default` - does not allow mobile devices; `allow-ignore` - shows a mobile device detected banner with a button to ignore this warning AT THE USERS OWN RISK; `allow-always` - skips the mobile check and allows mobile devices always (of course at the server admins OWN RISK) | `default` | -| `dangerous_hide_evelevated_alert` | Hides the elevated permissions alert in the UI. This is a dangerous option as using the UI with elevated permissions is against the threat model. | `false` | E.g. to allow mobile devices to ignore the mobile check, use the following Environment variable: @@ -547,15 +531,15 @@ INVENTREE_FRONTEND_SETTINGS='{"mobile_mode": "allow-ignore"}' The following [plugin](../plugins/index.md) configuration options are available: -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_PLUGINS_ENABLED | plugins_enabled | Enable plugin support | False | -| INVENTREE_PLUGIN_NOINSTALL | plugin_noinstall | Disable Plugin installation via API - only use plugins.txt file | False | -| INVENTREE_PLUGIN_FILE | plugins_plugin_file | Location of plugin installation file | *Not specified* | -| INVENTREE_PLUGIN_DIR | plugins_plugin_dir | Location of external plugin directory | *Not specified* | -| INVENTREE_PLUGINS_MANDATORY | plugins_mandatory | List of [plugins which are considered mandatory](../plugins/index.md#mandatory-third-party-plugins) | *Not specified* | -| INVENTREE_PLUGIN_DEV_SLUG | plugin_dev.slug | Specify plugin to run in [development mode](../plugins/creator.md#backend-configuration) | *Not specified* | -| INVENTREE_PLUGIN_DEV_HOST | plugin_dev.host | Specify host for development mode plugin | http://localhost:5174 | +{{ configtable() }} +{{ configsetting("INVENTREE_PLUGINS_ENABLED") }} Enable plugin support | +{{ configsetting("INVENTREE_PLUGIN_NOINSTALL") }} Disable Plugin installation via API | +{{ configsetting("INVENTREE_PLUGIN_FILE") }} Location of plugin installation file | +| `INVENTREE_PLUGIN_DIR` | `plugin_dir` | *Not specified* | Location of external plugin directory | +{{ configsetting("INVENTREE_PLUGIN_RETRY") }} Number of tries to attempt loading a plugin before giving up | +{{ configsetting("INVENTREE_PLUGINS_MANDATORY") }} List of [plugins which are considered mandatory](../plugins/index.md#mandatory-third-party-plugins) | +{{ configsetting("INVENTREE_PLUGIN_DEV_SLUG") }} Specify plugin to run in [development mode](../plugins/creator.md#backend-configuration) | +{{ configsetting("INVENTREE_PLUGIN_DEV_HOST") }} Specify host for development mode plugin | ## Override Global Settings @@ -563,6 +547,12 @@ If required, [global settings values](../settings/global.md#override-global-sett To override global settings, provide a "dictionary" of settings overrides in the configuration file, or via an environment variable. -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_GLOBAL_SETTINGS | global_settings | JSON object containing global settings overrides | *Not specified* | +{{ configtable() }} +{{ configsetting("INVENTREE_GLOBAL_SETTINGS") }} JSON object containing global settings overrides | + +## Other Settings + +Other available settings, not categorized above, are detailed in the table below: + +{{ configtable() }} +{{ configsetting("INVENTREE_EXTRA_URL_SCHEMES") }} Allow additional URL schemes for URL validation | diff --git a/docs/docs/start/docker_install.md b/docs/docs/start/docker_install.md index cb4f29da35..44f60ffba1 100644 --- a/docs/docs/start/docker_install.md +++ b/docs/docs/start/docker_install.md @@ -87,13 +87,7 @@ If you are creating the initial database, you need to create an admin (superuser docker compose run inventree-server invoke superuser ``` -Alternatively, admin account details can be specified in the `.env` file, removing the need for this manual step: - -| Variable | Description | -| --- | --- | -| INVENTREE_ADMIN_USER | Admin account username | -| INVENTREE_ADMIN_PASSWORD | Admin account password | -| INVENTREE_ADMIN_EMAIL | Admin account email address | +Alternatively, admin account details can be specified using environment variables, or in the `.env` file, removing the need for this manual step. Refer to the [configuration documentation](./config.md#administrator-account) for more information. !!! warning "Scrub Account Data" Ensure that the admin account credentials are removed from the `.env` file after the first run, for security. @@ -241,9 +235,9 @@ By default, the Dockerized InvenTree web server binds to all available network i This can be adjusted using the following environment variables: | Environment Variable | Default | -| --- | --- | --- | --- | -| INVENTREE_WEB_ADDR | 0.0.0.0 | -| INVENTREE_WEB_PORT | 8000 | +| --- | --- | +| `INVENTREE_WEB_ADDR` | 0.0.0.0 | +| `INVENTREE_WEB_PORT` | 8000 | These variables are combined in the [Dockerfile]({{ sourcefile("contrib/container/Dockerfile") }}) to build the bind string passed to the InvenTree server on startup. diff --git a/docs/main.py b/docs/main.py index c3d8cba512..148e61be65 100644 --- a/docs/main.py +++ b/docs/main.py @@ -34,6 +34,7 @@ for key in [ print(f' - {key}: {val}') # Cached settings dict values +global CONFIG_SETTINGS global GLOBAL_SETTINGS global USER_SETTINGS global TAGS @@ -64,6 +65,7 @@ with open(settings_file, encoding='utf-8') as sf: GLOBAL_SETTINGS = settings['global'] USER_SETTINGS = settings['user'] + CONFIG_SETTINGS = settings['config'] # Tags with open(gen_base.joinpath('inventree_tags.yml'), encoding='utf-8') as f: @@ -377,6 +379,34 @@ def define_env(env): return rendersetting(key, setting, short=short) + @env.macro + def configtable(): + """Generate a header for the configuration settings table.""" + return '| Environment Variable | Configuration File | Default | Description |\n| --- | --- | --- | --- |' + + @env.macro + def configsetting(key: str, default: Optional[str] = None): + """Extract information on a particular configuration setting. + + Arguments: + key: The name of the configuration setting to extract information for. + default: An optional default value to override the setting's default display value. + """ + global CONFIG_SETTINGS + setting = CONFIG_SETTINGS[key] + + observe_setting(key, 'config') + + cfg_key = setting.get('config_key', None) + cfg_key = f'`{cfg_key}`' if cfg_key else '-' + + default = default or setting.get('default_value', None) + + if default is None: + default = '*Not Specified*' + + return f'| {key} | {cfg_key} | {default} |' + @env.macro def tags_and_filters(): """Return a list of all tags and filters.""" diff --git a/docs/requirements.txt b/docs/requirements.txt index a7b56c1d5c..47d6d7fbfa 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -36,145 +36,146 @@ certifi==2026.2.25 \ # httpcore # httpx # requests -charset-normalizer==3.4.6 \ - --hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \ - --hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \ - --hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \ - --hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \ - --hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \ - --hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \ - --hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \ - --hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \ - --hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \ - --hash=sha256:1cf0a70018692f85172348fe06d3a4b63f94ecb055e13a00c644d368eb82e5b8 \ - --hash=sha256:1ed80ff870ca6de33f4d953fda4d55654b9a2b340ff39ab32fa3adbcd718f264 \ - --hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \ - --hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \ - --hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \ - --hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \ - --hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \ - --hash=sha256:2bd9d128ef93637a5d7a6af25363cf5dec3fa21cf80e68055aad627f280e8afa \ - --hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \ - --hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \ - --hash=sha256:2f7fdd9b6e6c529d6a2501a2d36b240109e78a8ceaef5687cfcfa2bbe671d297 \ - --hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \ - --hash=sha256:31215157227939b4fb3d740cd23fe27be0439afef67b785a1eb78a3ae69cba9e \ - --hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \ - --hash=sha256:3516bbb8d42169de9e61b8520cbeeeb716f12f4ecfe3fd30a9919aa16c806ca8 \ - --hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \ - --hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \ - --hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \ - --hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \ - --hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \ - --hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \ - --hash=sha256:461598cd852bfa5a61b09cae2b1c02e2efcd166ee5516e243d540ac24bfa68a7 \ - --hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \ - --hash=sha256:48696db7f18afb80a068821504296eb0787d9ce239b91ca15059d1d3eaacf13b \ - --hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \ - --hash=sha256:4d1d02209e06550bdaef34af58e041ad71b88e624f5d825519da3a3308e22687 \ - --hash=sha256:4f41da960b196ea355357285ad1316a00099f22d0929fe168343b99b254729c9 \ - --hash=sha256:517ad0e93394ac532745129ceabdf2696b609ec9f87863d337140317ebce1c14 \ - --hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \ - --hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \ - --hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \ - --hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \ - --hash=sha256:54fae94be3d75f3e573c9a1b5402dc593de19377013c9a0e4285e3d402dd3a2a \ - --hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \ - --hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \ - --hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \ - --hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \ - --hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \ - --hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \ - --hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \ - --hash=sha256:659a1e1b500fac8f2779dd9e1570464e012f43e580371470b45277a27baa7532 \ - --hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \ - --hash=sha256:69dd852c2f0ad631b8b60cfbe25a28c0058a894de5abb566619c205ce0550eae \ - --hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \ - --hash=sha256:71be7e0e01753a89cf024abf7ecb6bca2c81738ead80d43004d9b5e3f1244e64 \ - --hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \ - --hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \ - --hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \ - --hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \ - --hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \ - --hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \ - --hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \ - --hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \ - --hash=sha256:802168e03fba8bbc5ce0d866d589e4b1ca751d06edee69f7f3a19c5a9fe6b597 \ - --hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \ - --hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \ - --hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \ - --hash=sha256:8761ac29b6c81574724322a554605608a9960769ea83d2c73e396f3df896ad54 \ - --hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \ - --hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \ - --hash=sha256:8bc5f0687d796c05b1e28ab0d38a50e6309906ee09375dd3aff6a9c09dd6e8f4 \ - --hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \ - --hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \ - --hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \ - --hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \ - --hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \ - --hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \ - --hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \ - --hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \ - --hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \ - --hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \ - --hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \ - --hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \ - --hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \ - --hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \ - --hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \ - --hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \ - --hash=sha256:ab30e5e3e706e3063bc6de96b118688cb10396b70bb9864a430f67df98c61ecc \ - --hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \ - --hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \ - --hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \ - --hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \ - --hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \ - --hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \ - --hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \ - --hash=sha256:bf625105bb9eef28a56a943fec8c8a98aeb80e7d7db99bd3c388137e6eb2d237 \ - --hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \ - --hash=sha256:c45a03a4c69820a399f1dda9e1d8fbf3562eda46e7720458180302021b08f778 \ - --hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \ - --hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \ - --hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \ - --hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \ - --hash=sha256:d08ec48f0a1c48d75d0356cea971921848fb620fdeba805b28f937e90691209f \ - --hash=sha256:d1a2ee9c1499fc8f86f4521f27a973c914b211ffa87322f4ee33bb35392da2c5 \ - --hash=sha256:d5f5d1e9def3405f60e3ca8232d56f35c98fb7bf581efcc60051ebf53cb8b611 \ - --hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \ - --hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \ - --hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \ - --hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \ - --hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \ - --hash=sha256:df01808ee470038c3f8dc4f48620df7225c49c2d6639e38f96e6d6ac6e6f7b0e \ - --hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \ - --hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \ - --hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \ - --hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \ - --hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \ - --hash=sha256:e8aeb10fcbe92767f0fa69ad5a72deca50d0dca07fbde97848997d778a50c9fe \ - --hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \ - --hash=sha256:ecbbd45615a6885fe3240eb9db73b9e62518b611850fdf8ab08bd56de7ad2b17 \ - --hash=sha256:ee4ec14bc1680d6b0afab9aea2ef27e26d2024f18b24a2d7155a52b60da7e833 \ - --hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \ - --hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \ - --hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \ - --hash=sha256:f50498891691e0864dc3da965f340fada0771f6142a378083dc4608f4ea513e2 \ - --hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \ - --hash=sha256:f61aa92e4aad0be58eb6eb4e0c21acf32cf8065f4b2cae5665da756c4ceef982 \ - --hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \ - --hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \ - --hash=sha256:f98059e4fcd3e3e4e2d632b7cf81c2faae96c43c60b569e9c621468082f1d104 \ - --hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659 +charset-normalizer==3.4.7 \ + --hash=sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc \ + --hash=sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c \ + --hash=sha256:07d9e39b01743c3717745f4c530a6349eadbfa043c7577eef86c502c15df2c67 \ + --hash=sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4 \ + --hash=sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0 \ + --hash=sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c \ + --hash=sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5 \ + --hash=sha256:12a6fff75f6bc66711b73a2f0addfc4c8c15a20e805146a02d147a318962c444 \ + --hash=sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153 \ + --hash=sha256:14265bfe1f09498b9d8ec91e9ec9fa52775edf90fcbde092b25f4a33d444fea9 \ + --hash=sha256:16d971e29578a5e97d7117866d15889a4a07befe0e87e703ed63cd90cb348c01 \ + --hash=sha256:177a0ba5f0211d488e295aaf82707237e331c24788d8d76c96c5a41594723217 \ + --hash=sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b \ + --hash=sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c \ + --hash=sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a \ + --hash=sha256:1dc8b0ea451d6e69735094606991f32867807881400f808a106ee1d963c46a83 \ + --hash=sha256:1efde3cae86c8c273f1eb3b287be7d8499420cf2fe7585c41d370d3e790054a5 \ + --hash=sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7 \ + --hash=sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb \ + --hash=sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c \ + --hash=sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1 \ + --hash=sha256:2cd4a60d0e2fb04537162c62bbbb4182f53541fe0ede35cdf270a1c1e723cc42 \ + --hash=sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab \ + --hash=sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df \ + --hash=sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e \ + --hash=sha256:320ade88cfb846b8cd6b4ddf5ee9e80ee0c1f52401f2456b84ae1ae6a1a5f207 \ + --hash=sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18 \ + --hash=sha256:36836d6ff945a00b88ba1e4572d721e60b5b8c98c155d465f56ad19d68f23734 \ + --hash=sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38 \ + --hash=sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110 \ + --hash=sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18 \ + --hash=sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44 \ + --hash=sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d \ + --hash=sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48 \ + --hash=sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e \ + --hash=sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5 \ + --hash=sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d \ + --hash=sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53 \ + --hash=sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790 \ + --hash=sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c \ + --hash=sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b \ + --hash=sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116 \ + --hash=sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d \ + --hash=sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10 \ + --hash=sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6 \ + --hash=sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2 \ + --hash=sha256:6370e8686f662e6a3941ee48ed4742317cafbe5707e36406e9df792cdb535776 \ + --hash=sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a \ + --hash=sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265 \ + --hash=sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008 \ + --hash=sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943 \ + --hash=sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374 \ + --hash=sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246 \ + --hash=sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e \ + --hash=sha256:6e0d51f618228538a3e8f46bd246f87a6cd030565e015803691603f55e12afb5 \ + --hash=sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616 \ + --hash=sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15 \ + --hash=sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41 \ + --hash=sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960 \ + --hash=sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752 \ + --hash=sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e \ + --hash=sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72 \ + --hash=sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7 \ + --hash=sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8 \ + --hash=sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b \ + --hash=sha256:813c0e0132266c08eb87469a642cb30aaff57c5f426255419572aaeceeaa7bf4 \ + --hash=sha256:82b271f5137d07749f7bf32f70b17ab6eaabedd297e75dce75081a24f76eb545 \ + --hash=sha256:84c018e49c3bf790f9c2771c45e9313a08c2c2a6342b162cd650258b57817706 \ + --hash=sha256:8751d2787c9131302398b11e6c8068053dcb55d5a8964e114b6e196cf16cb366 \ + --hash=sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb \ + --hash=sha256:87fad7d9ba98c86bcb41b2dc8dbb326619be2562af1f8ff50776a39e55721c5a \ + --hash=sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e \ + --hash=sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00 \ + --hash=sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f \ + --hash=sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a \ + --hash=sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1 \ + --hash=sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66 \ + --hash=sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356 \ + --hash=sha256:a6c5863edfbe888d9eff9c8b8087354e27618d9da76425c119293f11712a6319 \ + --hash=sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4 \ + --hash=sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad \ + --hash=sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d \ + --hash=sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5 \ + --hash=sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7 \ + --hash=sha256:aef65cd602a6d0e0ff6f9930fcb1c8fec60dd2cfcb6facaf4bdb0e5873042db0 \ + --hash=sha256:af21eb4409a119e365397b2adbaca4c9ccab56543a65d5dbd9f920d6ac29f686 \ + --hash=sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34 \ + --hash=sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49 \ + --hash=sha256:bb8cc7534f51d9a017b93e3e85b260924f909601c3df002bcdb58ddb4dc41a5c \ + --hash=sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1 \ + --hash=sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e \ + --hash=sha256:bd9b23791fe793e4968dba0c447e12f78e425c59fc0e3b97f6450f4781f3ee60 \ + --hash=sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0 \ + --hash=sha256:c0f081d69a6e58272819b70288d3221a6ee64b98df852631c80f293514d3b274 \ + --hash=sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d \ + --hash=sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0 \ + --hash=sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae \ + --hash=sha256:c593052c465475e64bbfe5dbd81680f64a67fdc752c56d7a0ae205dc8aeefe0f \ + --hash=sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d \ + --hash=sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe \ + --hash=sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3 \ + --hash=sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393 \ + --hash=sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1 \ + --hash=sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af \ + --hash=sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44 \ + --hash=sha256:d61f00a0869d77422d9b2aba989e2d24afa6ffd552af442e0e58de4f35ea6d00 \ + --hash=sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c \ + --hash=sha256:dca4bbc466a95ba9c0234ef56d7dd9509f63da22274589ebd4ed7f1f4d4c54e3 \ + --hash=sha256:dd915403e231e6b1809fe9b6d9fc55cf8fb5e02765ac625d9cd623342a7905d7 \ + --hash=sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd \ + --hash=sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e \ + --hash=sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b \ + --hash=sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8 \ + --hash=sha256:e5f4d355f0a2b1a31bc3edec6795b46324349c9cb25eed068049e4f472fb4259 \ + --hash=sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859 \ + --hash=sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46 \ + --hash=sha256:e80c8378d8f3d83cd3164da1ad2df9e37a666cdde7b1cb2298ed0b558064be30 \ + --hash=sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b \ + --hash=sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46 \ + --hash=sha256:ed065083d0898c9d5b4bbec7b026fd755ff7454e6e8b73a67f8c744b13986e24 \ + --hash=sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a \ + --hash=sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24 \ + --hash=sha256:f22dec1690b584cea26fade98b2435c132c1b5f68e39f5a0b7627cd7ae31f1dc \ + --hash=sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215 \ + --hash=sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063 \ + --hash=sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832 \ + --hash=sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6 \ + --hash=sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79 \ + --hash=sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464 # via # -c src/backend/requirements.txt # requests -click==8.3.1 \ - --hash=sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a \ - --hash=sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6 +click==8.3.2 \ + --hash=sha256:14162b8b3b3550a7d479eafa77dfd3c38d9dc8951f6f69c78913a8f9a7540fd5 \ + --hash=sha256:1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d # via # mkdocs # neoteroi-mkdocs + # properdocs colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 @@ -194,7 +195,9 @@ essentials-openapi==1.4.0 \ ghp-import==2.1.0 \ --hash=sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619 \ --hash=sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343 - # via mkdocs + # via + # mkdocs + # properdocs gitdb==4.0.12 \ --hash=sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571 \ --hash=sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf @@ -242,6 +245,7 @@ jinja2==3.1.6 \ # mkdocs-material # mkdocstrings # neoteroi-mkdocs + # properdocs jsbeautifier==1.15.4 \ --hash=sha256:5bb18d9efb9331d825735fbc5360ee8f1aac5e52780042803943aa7f854f7592 \ --hash=sha256:72f65de312a3f10900d7685557f84cb61a9733c50dcc27271a39f5b0051bf528 @@ -255,6 +259,7 @@ markdown==3.10.2 \ # mkdocs-autorefs # mkdocs-material # mkdocstrings + # properdocs # pymdown-extensions markdown-it-py==4.0.0 \ --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \ @@ -357,6 +362,7 @@ markupsafe==3.0.3 \ # mkdocs # mkdocs-autorefs # mkdocstrings + # properdocs mdurl==0.1.2 \ --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba @@ -396,9 +402,9 @@ mkdocs-git-revision-date-localized-plugin==1.5.1 \ --hash=sha256:2b0239455cd84784dd87ac8dfc9253fe4b2dd35e102696f21b5d34e2175981c6 \ --hash=sha256:b00fd36ed0f9b2326b1488fd8fa31bf2ce64e68c4aa60a9ce857f10719571903 # via -r docs/requirements.in -mkdocs-include-markdown-plugin==7.2.1 \ - --hash=sha256:30da634c568ea5d5f9e5881d51f80ac30d8c5f891cec160344ad7a0fdaea6286 \ - --hash=sha256:5d94db87b06cd303619dbaebba5f7f43a3ded7fd7709451d26f08c176376ffec +mkdocs-include-markdown-plugin==7.2.2 \ + --hash=sha256:f052ccb741eccf498116b826c1d78a2d761c56747372594709441cee0963fbc9 \ + --hash=sha256:f2ec4487cf32d3e33ca528f9366f20fb9280ded9c8d1630eb2bbda244962dcd1 # via -r docs/requirements.in mkdocs-macros-plugin==1.5.0 \ --hash=sha256:12aa45ce7ecb7a445c66b9f649f3dd05e9b92e8af6bc65e4acd91d26f878c01f \ @@ -416,9 +422,9 @@ mkdocs-mermaid2-plugin==1.2.3 \ --hash=sha256:33f60c582be623ed53829a96e19284fc7f1b74a1dbae78d4d2e47fe00c3e190d \ --hash=sha256:fb6f901d53e5191e93db78f93f219cad926ccc4d51e176271ca5161b6cc5368c # via -r docs/requirements.in -mkdocs-redirects==1.2.2 \ - --hash=sha256:3094981b42ffab29313c2c1b8ac3969861109f58b2dd58c45fc81cd44bfa0095 \ - --hash=sha256:7dbfa5647b79a3589da4401403d69494bd1f4ad03b9c15136720367e1f340ed5 +mkdocs-redirects==1.2.3 \ + --hash=sha256:5e980330999299729a2d6a125347d1af78023d68a23681a4de3053ce7dfe2e51 \ + --hash=sha256:ec7312fff462d03ec16395d0c001006a418f8d0c21cdf2b47ff11cf839dc3ce0 # via -r docs/requirements.in mkdocs-simple-hooks==0.1.5 \ --hash=sha256:dddbdf151a18723c9302a133e5cf79538be8eb9d274e8e07d2ac3ac34890837c \ @@ -445,6 +451,7 @@ packaging==26.0 \ # -c src/backend/requirements.txt # mkdocs # mkdocs-macros-plugin + # properdocs paginate==0.5.7 \ --hash=sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945 \ --hash=sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591 @@ -455,12 +462,18 @@ pathspec==1.0.4 \ # via # mkdocs # mkdocs-macros-plugin -platformdirs==4.9.4 \ - --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ - --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 + # properdocs +platformdirs==4.9.6 \ + --hash=sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a \ + --hash=sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917 # via # -c src/backend/requirements.txt # mkdocs-get-deps + # properdocs +properdocs==1.6.7 \ + --hash=sha256:6fa0cfa2e01bf338f684892c8a506cf70ea88ae7f3479c933b6fa20168101cbd \ + --hash=sha256:adc7b16e562890af0e098a7e5b02e3a81c20894a87d6a28d345c9300de73c26e + # via mkdocs-redirects pygments==2.20.0 \ --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 @@ -561,15 +574,18 @@ pyyaml==6.0.3 \ # mkdocs # mkdocs-get-deps # mkdocs-macros-plugin + # properdocs # pymdown-extensions # pyyaml-env-tag pyyaml-env-tag==1.1 \ --hash=sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04 \ --hash=sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff - # via mkdocs -requests==2.33.0 \ - --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ - --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 + # via + # mkdocs + # properdocs +requests==2.33.1 \ + --hash=sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517 \ + --hash=sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a # via # -c src/backend/requirements.txt # mkdocs-macros-plugin @@ -652,7 +668,9 @@ watchdog==6.0.0 \ --hash=sha256:e6f0e77c9417e7cd62af82529b10563db3423625c5fce018430b249bf977f9e8 \ --hash=sha256:e7631a77ffb1f7d2eefa4445ebbee491c720a5661ddf6df3498ebecae5ed375c \ --hash=sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2 - # via mkdocs + # via + # mkdocs + # properdocs wcmatch==10.1 \ --hash=sha256:5848ace7dbb0476e5e55ab63c6bbd529745089343427caa5537f230cc01beb8a \ --hash=sha256:f11f94208c8c8484a16f4f48638a85d771d9513f4ab3f37595978801cb9465af diff --git a/src/backend/InvenTree/InvenTree/api.py b/src/backend/InvenTree/InvenTree/api.py index 31a9f0aa39..87edf69474 100644 --- a/src/backend/InvenTree/InvenTree/api.py +++ b/src/backend/InvenTree/InvenTree/api.py @@ -15,7 +15,7 @@ from django.views.generic.base import RedirectView import structlog from django_q.models import OrmQ from drf_spectacular.utils import OpenApiParameter, OpenApiResponse, extend_schema -from rest_framework import serializers +from rest_framework import serializers, viewsets from rest_framework.generics import GenericAPIView from rest_framework.request import clone_request from rest_framework.response import Response @@ -297,7 +297,7 @@ class InfoView(APIView): 'instance': InvenTree.version.inventreeInstanceName(), 'apiVersion': InvenTree.version.inventreeApiVersion(), 'worker_running': is_worker_running(), - 'worker_count': settings.BACKGROUND_WORKER_COUNT, + 'worker_count': settings.Q_CLUSTER['workers'], 'worker_pending_tasks': self.worker_pending_tasks(), 'plugins_enabled': settings.PLUGINS_ENABLED, 'plugins_install_disabled': settings.PLUGINS_INSTALL_DISABLED, @@ -625,12 +625,8 @@ class ParameterListMixin: return queryset -class BulkDeleteMixin(BulkOperationMixin): - """Mixin class for enabling 'bulk delete' operations for various models. - - Bulk delete allows for multiple items to be deleted in a single API query, - rather than using multiple API calls to the various detail endpoints. - """ +class CommonBulkDeleteMixin(BulkOperationMixin): + """Helper for creating bulk delete operation on classic cbv and viewsets.""" def validate_delete(self, queryset, request) -> None: """Perform validation right before deletion. @@ -655,7 +651,7 @@ class BulkDeleteMixin(BulkOperationMixin): return queryset @extend_schema(request=BulkRequestSerializer) - def delete(self, request, *args, **kwargs): + def _delete(self, request, *args, **kwargs): """Perform a DELETE operation against this list endpoint. Note that the typical DRF list endpoint does not support DELETE, @@ -679,6 +675,37 @@ class BulkDeleteMixin(BulkOperationMixin): return Response({'success': f'Deleted {n_deleted} items'}, status=200) +class BulkDeleteMixin(CommonBulkDeleteMixin): + """Mixin class for enabling 'bulk delete' operations for various models. + + Bulk delete allows for multiple items to be deleted in a single API query, + rather than using multiple API calls to the various detail endpoints. + """ + + @extend_schema(request=BulkRequestSerializer) + def delete(self, request, *args, **kwargs): + """Perform a DELETE operation against this list endpoint. + + Note that the typical DRF list endpoint does not support DELETE, + so this method is provided as a custom implementation. + """ + return self._delete(request, *args, **kwargs) + + +class BulkDeleteViewsetMixin(CommonBulkDeleteMixin, viewsets.GenericViewSet): + """Mixin class for enabling 'bulk delete' operations for viewsets.""" + + @extend_schema(request=BulkRequestSerializer) + def bulk_delete(self, request, *args, **kwargs): + """Perform a bulk delete operation. + + Provide either a list of ids (via `items`) or a filter (via `filters`) to select the items to be deleted. + + This action is performed attomically, so either all items will be deleted, or none will be deleted. + """ + return self._delete(request, *args, **kwargs) + + class ListCreateDestroyAPIView(BulkDeleteMixin, ListCreateAPI): """Custom API endpoint which provides BulkDelete functionality in addition to List and Create.""" diff --git a/src/backend/InvenTree/InvenTree/api_version.py b/src/backend/InvenTree/InvenTree/api_version.py index 354c46c20c..0b03d4790a 100644 --- a/src/backend/InvenTree/InvenTree/api_version.py +++ b/src/backend/InvenTree/InvenTree/api_version.py @@ -1,11 +1,42 @@ """InvenTree API version information.""" # InvenTree API version -INVENTREE_API_VERSION = 470 +INVENTREE_API_VERSION = 479 """Increment this API version number whenever there is a significant change to the API that any clients need to know about.""" INVENTREE_API_TEXT = """ +v479 -> 2026-04-11 : https://github.com/inventree/InvenTree/pull/11723 + - POST /api//notifications/readall/ now requires a POST action + - POST /api/admin/email/test/ - now returns a 200 on. a successful test + - GET /api/notifications/ - now uses user-centric permissions, not a general read + +v478 -> 2026-04-11 : https://github.com/inventree/InvenTree/pull/11073 + - Add OptionalField class for cleaner handling of optional fields in serializers + +v477 -> 2026-04-11 : https://github.com/inventree/InvenTree/pull/11617 + - Non-functional refactor, adaptations of descriptions + +v476 -> 2026-04-09 : https://github.com/inventree/InvenTree/pull/11705 + - Adds sorting / filtering / searching functionality to the SelectionListEntry API endpoint + +v475 -> 2026-04-09 : https://github.com/inventree/InvenTree/pull/11702 + - Adds "updated" and "updated_by" fields to the LabelTemplate and ReportTemplate API endpoints + +v474 -> 2026-04-08 : https://github.com/inventree/InvenTree/pull/11693 + - Adds DataImportMixin to the ManufacturerPartList API endpoint + +v473 -> 2026-04-08 : https://github.com/inventree/InvenTree/pull/11692 + - Adds "line" field to PurchaseOrderLineItem and PurchaseOrderExtraLineItem API endpoints + - Adds "line" field to SalesOrderLineItem and SalesOrderExtraLineItem API endpoints + - Adds "line" field to ReturnOrderLineItem and ReturnOrderExtraLineItem API endpoints + +v472 -> 2026-04-01 : https://github.com/inventree/InvenTree/pull/xxxx + - Fixes writable fields on the user detail endpoint + +v471 -> 2026-04-07 : https://github.com/inventree/InvenTree/pull/11685 + - Adds data importer support for the "SalesOrderShipment" model + v470 -> 2026-04-01 : https://github.com/inventree/InvenTree/pull/11659 - Renames "is_staff" field to "is_admin" and updates help texts accordingly to highlight current security boundaries @@ -13,7 +44,7 @@ v469 -> 2026-03-31 : https://github.com/inventree/InvenTree/pull/11641 - Adds parameter support to the SalesOrderShipment model and API endpoints v468 -> 2026-03-31 : https://github.com/inventree/InvenTree/pull/11649 - - Add ordering to contetype related fields - no functional changes + - Add ordering to contentype related fields - no functional changes v467 -> 2026-03-20 : https://github.com/inventree/InvenTree/pull/11573 - Fix definition for the "parent" field on the StockItemSerializer diff --git a/src/backend/InvenTree/InvenTree/cache.py b/src/backend/InvenTree/InvenTree/cache.py index 00214610cc..07547eb667 100644 --- a/src/backend/InvenTree/InvenTree/cache.py +++ b/src/backend/InvenTree/InvenTree/cache.py @@ -50,6 +50,11 @@ def cache_user(): return cache_setting('user', None) +def cache_db(): + """Return the cache database index.""" + return cache_setting('db', 0, typecast=int) + + def is_global_cache_enabled() -> bool: """Check if the global cache is enabled. @@ -89,49 +94,51 @@ def get_cache_config(global_cache: bool) -> dict: Returns: A dictionary containing the cache configuration options. """ - if global_cache: - # Build Redis URL with optional password - password = cache_password() - user = cache_user() or '' + # Build Redis URL with optional password + password = cache_password() + user = cache_user() or '' + host = cache_host() + port = cache_port() + db = cache_db() - if password: - redis_url = f'redis://{user}:{password}@{cache_host()}:{cache_port()}/0' - else: - redis_url = f'redis://{cache_host()}:{cache_port()}/0' + if password: + redis_url = f'redis://{user}:{password}@{host}:{port}/{db}' + else: + redis_url = f'redis://{host}:{port}/{db}' - keepalive_options = { - 'TCP_KEEPCNT': cache_setting('keepalive_count', 5, typecast=int), - 'TCP_KEEPIDLE': cache_setting('keepalive_idle', 1, typecast=int), - 'TCP_KEEPINTVL': cache_setting('keepalive_interval', 1, typecast=int), - 'TCP_USER_TIMEOUT': cache_setting('user_timeout', 1000, typecast=int), - } + keepalive_options = { + 'TCP_KEEPCNT': cache_setting('keepalive_count', 5, typecast=int), + 'TCP_KEEPIDLE': cache_setting('keepalive_idle', 1, typecast=int), + 'TCP_KEEPINTVL': cache_setting('keepalive_interval', 1, typecast=int), + 'TCP_USER_TIMEOUT': cache_setting('user_timeout', 1000, typecast=int), + } - return { - 'BACKEND': 'django_redis.cache.RedisCache', - 'LOCATION': redis_url, - 'OPTIONS': { - 'CLIENT_CLASS': 'django_redis.client.DefaultClient', - 'SOCKET_CONNECT_TIMEOUT': cache_setting( - 'connect_timeout', 5, typecast=int - ), - 'SOCKET_TIMEOUT': cache_setting('timeout', 3, typecast=int), - 'CONNECTION_POOL_KWARGS': { - 'socket_keepalive': cache_setting( - 'tcp_keepalive', True, typecast=bool - ), - 'socket_keepalive_options': { - # Only include options which are available on this platform - # e.g. MacOS does not have TCP_KEEPIDLE and TCP_USER_TIMEOUT - getattr(socket, key): value - for key, value in keepalive_options.items() - if hasattr(socket, key) - }, + global_cache_config = { + 'BACKEND': 'django_redis.cache.RedisCache', + 'LOCATION': redis_url, + 'OPTIONS': { + 'CLIENT_CLASS': 'django_redis.client.DefaultClient', + 'SOCKET_CONNECT_TIMEOUT': cache_setting('connect_timeout', 5, typecast=int), + 'SOCKET_TIMEOUT': cache_setting('timeout', 3, typecast=int), + 'CONNECTION_POOL_KWARGS': { + 'socket_keepalive': cache_setting('tcp_keepalive', True, typecast=bool), + 'socket_keepalive_options': { + # Only include options which are available on this platform + # e.g. MacOS does not have TCP_KEEPIDLE and TCP_USER_TIMEOUT + getattr(socket, key): value + for key, value in keepalive_options.items() + if hasattr(socket, key) }, }, - } + }, + } - # Default: Use django local memory cache - return {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'} + if global_cache: + # Only return the global cache configuration if the global cache is enabled + return global_cache_config + else: + # Default: Use django local memory cache + return {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'} def create_session_cache(request) -> None: diff --git a/src/backend/InvenTree/InvenTree/config.py b/src/backend/InvenTree/InvenTree/config.py index d71d80e567..a4947de545 100644 --- a/src/backend/InvenTree/InvenTree/config.py +++ b/src/backend/InvenTree/InvenTree/config.py @@ -270,10 +270,13 @@ def get_setting(env_var=None, config_key=None, default_value=None, typecast=None def set_metadata(source: str): """Set lookup metadata for the setting.""" + global CONFIG_LOOKUPS + key = env_var or config_key CONFIG_LOOKUPS[key] = { 'env_var': env_var, 'config_key': config_key, + 'default_value': default_value, 'source': source, 'accessed': datetime.datetime.now(), } @@ -544,13 +547,14 @@ def get_frontend_settings(debug=True): 'INVENTREE_FRONTEND_SETTINGS', 'frontend_settings', {}, typecast=dict ) + base_url = get_setting( + 'INVENTREE_FRONTEND_URL_BASE', 'frontend_url_base', 'web', typecast=str + ) + # Set the base URL for the user interface # This is the UI path e.g. '/web/' if 'base_url' not in frontend_settings: - frontend_settings['base_url'] = ( - get_setting('INVENTREE_FRONTEND_URL_BASE', 'frontend_url_base', 'web') - or 'web' - ) + frontend_settings['base_url'] = base_url # If provided, specify the API host api_host = frontend_settings.get('api_host', None) or get_setting( diff --git a/src/backend/InvenTree/InvenTree/helpers.py b/src/backend/InvenTree/InvenTree/helpers.py index 101335f6f8..bd358a9fe6 100644 --- a/src/backend/InvenTree/InvenTree/helpers.py +++ b/src/backend/InvenTree/InvenTree/helpers.py @@ -8,6 +8,7 @@ import json import os.path import re from decimal import Decimal, InvalidOperation +from pathlib import Path from typing import Optional, TypeVar from wsgiref.util import FileWrapper from zoneinfo import ZoneInfo, ZoneInfoNotFoundError @@ -35,9 +36,6 @@ from InvenTree.sanitizer import ( DEFAULT_TAGS, ) -from .setting.storages import StorageBackends -from .settings import MEDIA_URL, STATIC_URL - logger = structlog.get_logger('inventree') INT_CLIP_MAX = 0x7FFFFFFF @@ -189,9 +187,8 @@ def getMediaUrl( ) if name is not None: file = regenerate_imagefile(file, name) - if settings.STORAGE_TARGET == StorageBackends.S3: - return str(file.url) - return os.path.join(MEDIA_URL, str(file.url)) + + return default_storage.url(file.name) def regenerate_imagefile(_file, _name: str): @@ -229,7 +226,7 @@ def image2name(img_obj: StdImageField, do_preview: bool, do_thumbnail: bool): def getStaticUrl(filename): """Return the qualified access path for the given file, under the static media directory.""" - return os.path.join(STATIC_URL, str(filename)) + return StaticFilesStorage().url(filename) def TestIfImage(img) -> bool: @@ -261,8 +258,8 @@ def getBlankThumbnail(): def checkStaticFile(*args) -> bool: """Check if a file exists in the static storage.""" static_storage = StaticFilesStorage() - fn = os.path.join(*args) - return static_storage.exists(fn) + fn = Path(*args) + return static_storage.exists(str(fn)) def getLogoImage(as_file=False, custom=True): diff --git a/src/backend/InvenTree/InvenTree/helpers_api.py b/src/backend/InvenTree/InvenTree/helpers_api.py new file mode 100644 index 0000000000..03c2bf4fda --- /dev/null +++ b/src/backend/InvenTree/InvenTree/helpers_api.py @@ -0,0 +1,49 @@ +"""Helpers for InvenTrees way of using drf viewset.""" + +from rest_framework import mixins, routers, viewsets + +from InvenTree.api import BulkDeleteViewsetMixin + + +class RetrieveUpdateDestroyModelViewSet( + mixins.RetrieveModelMixin, + mixins.UpdateModelMixin, + mixins.DestroyModelMixin, + mixins.ListModelMixin, + viewsets.GenericViewSet, +): + """Viewset which provides 'retrieve', 'update', 'destroy' and 'list' actions.""" + + +class RetrieveDestroyModelViewSet( + mixins.RetrieveModelMixin, + mixins.DestroyModelMixin, + mixins.ListModelMixin, + viewsets.GenericViewSet, +): + """Viewset which provides 'retrieve', 'destroy' and 'list' actions.""" + + +class InvenTreeApiRouter(routers.SimpleRouter): + """Custom router which adds various specific functions. + + Currently adds the following features: + - support for bulk delete operations + """ + + def get_routes(self, viewset): + """Override the default get_routes method to add bulk delete support.""" + routes = super().get_routes(viewset) + + if issubclass(viewset, BulkDeleteViewsetMixin): + list_route = next( + (route for route in routes if route.mapping.get('get') == 'list'), None + ) + list_route.mapping['delete'] = 'bulk_delete' + + return routes + + def get_default_basename(self, viewset): + """Extract the default base name from the viewset.""" + basename = super().get_default_basename(viewset) + return 'api-' + basename diff --git a/src/backend/InvenTree/InvenTree/helpers_model.py b/src/backend/InvenTree/InvenTree/helpers_model.py index a16b0132f6..455c8e000d 100644 --- a/src/backend/InvenTree/InvenTree/helpers_model.py +++ b/src/backend/InvenTree/InvenTree/helpers_model.py @@ -1,9 +1,11 @@ """Provides helper functions used throughout the InvenTree project that access the database.""" import io +import ipaddress +import socket from decimal import Decimal from typing import Optional, cast -from urllib.parse import urljoin +from urllib.parse import urljoin, urlparse from django.conf import settings from django.core.exceptions import ValidationError @@ -88,6 +90,36 @@ def construct_absolute_url(*arg, base_url=None, request=None): return urljoin(base_url, relative_url) +def validate_url_no_ssrf(url): + """Validate that a URL does not point to a private/internal network address. + + Resolves the hostname to an IP address and checks it against private, + loopback, link-local, and reserved IP ranges to prevent SSRF attacks. + + Arguments: + url: The URL to validate + + Raises: + ValueError: If the URL resolves to a private or reserved IP address + """ + parsed = urlparse(url) + hostname = parsed.hostname + + if not hostname: + raise ValueError(_('Invalid URL: no hostname')) + + try: + addrinfo = socket.getaddrinfo(hostname, None) + except socket.gaierror: + raise ValueError(_('Invalid URL: hostname could not be resolved')) + + for _family, _type, _proto, _canonname, sockaddr in addrinfo: + ip = ipaddress.ip_address(sockaddr[0]) + + if ip.is_private or ip.is_loopback or ip.is_link_local or ip.is_reserved: + raise ValueError(_('URL points to a private or reserved IP address')) + + def download_image_from_url(remote_url, timeout=2.5): """Download an image file from a remote URL. @@ -115,6 +147,9 @@ def download_image_from_url(remote_url, timeout=2.5): validator = URLValidator() validator(remote_url) + # SSRF protection: validate the resolved IP is not private/internal + validate_url_no_ssrf(remote_url) + # Calculate maximum allowable image size (in bytes) max_size = ( int(get_global_setting('INVENTREE_DOWNLOAD_IMAGE_MAX_SIZE')) * 1024 * 1024 @@ -129,10 +164,36 @@ def download_image_from_url(remote_url, timeout=2.5): response = requests.get( remote_url, timeout=timeout, - allow_redirects=True, + allow_redirects=False, stream=True, headers=headers, ) + + # Handle redirects manually to validate each destination + max_redirects = 5 + redirect_count = 0 + + while response.is_redirect and redirect_count < max_redirects: + redirect_url = response.headers.get('Location') + if not redirect_url: + break + + # Validate the redirect destination against SSRF + validator(redirect_url) + validate_url_no_ssrf(redirect_url) + + redirect_count += 1 + response = requests.get( + redirect_url, + timeout=timeout, + allow_redirects=False, + stream=True, + headers=headers, + ) + + if redirect_count >= max_redirects: + raise ValueError(_('Too many redirects')) + # Throw an error if anything goes wrong response.raise_for_status() except requests.exceptions.ConnectionError as exc: @@ -143,6 +204,8 @@ def download_image_from_url(remote_url, timeout=2.5): raise requests.exceptions.HTTPError( _('Server responded with invalid status code') + f': {response.status_code}' ) + except ValueError: + raise except Exception as exc: raise Exception(_('Exception occurred') + f': {exc!s}') diff --git a/src/backend/InvenTree/InvenTree/management/commands/export_settings_definitions.py b/src/backend/InvenTree/InvenTree/management/commands/export_settings_definitions.py index fef25f676a..09199f06db 100644 --- a/src/backend/InvenTree/InvenTree/management/commands/export_settings_definitions.py +++ b/src/backend/InvenTree/InvenTree/management/commands/export_settings_definitions.py @@ -24,8 +24,9 @@ class Command(BaseCommand): def handle(self, *args, **kwargs): """Export settings information to a JSON file.""" from common.models import InvenTreeSetting, InvenTreeUserSetting + from InvenTree.config import CONFIG_LOOKUPS - settings = {'global': {}, 'user': {}} + settings = {'global': {}, 'user': {}, 'config': {}} # Global settings for key, setting in InvenTreeSetting.SETTINGS.items(): @@ -45,6 +46,18 @@ class Command(BaseCommand): 'units': str(setting.get('units', '')), } + # Configuration settings + for key, config in CONFIG_LOOKUPS.items(): + default_value = config.get('default_value', None) + if default_value is not None: + default_value = str(default_value) + + settings['config'][key] = { + 'env_var': str(config.get('env_var', '')), + 'config_key': str(config.get('config_key', '')), + 'default_value': default_value, + } + filename = kwargs.get('filename', 'inventree_settings.json') with open(filename, 'w', encoding='utf-8') as f: diff --git a/src/backend/InvenTree/InvenTree/management/commands/rebuild_thumbnails.py b/src/backend/InvenTree/InvenTree/management/commands/rebuild_thumbnails.py index d4b133d5ab..3025f37eb6 100644 --- a/src/backend/InvenTree/InvenTree/management/commands/rebuild_thumbnails.py +++ b/src/backend/InvenTree/InvenTree/management/commands/rebuild_thumbnails.py @@ -3,8 +3,7 @@ - May be required after importing a new dataset, for example """ -import os - +from django.core.files.storage import default_storage from django.core.management.base import BaseCommand from django.db.utils import OperationalError, ProgrammingError @@ -35,7 +34,7 @@ class Command(BaseCommand): img_paths.append(x.path) if len(img_paths) > 0: - if all(os.path.exists(path) for path in img_paths): + if all(default_storage.exists(p) for p in img_paths): # All images exist - skip further work return diff --git a/src/backend/InvenTree/InvenTree/management/commands/wait_for_db.py b/src/backend/InvenTree/InvenTree/management/commands/wait_for_db.py index 68b33adfff..84fcb2ebff 100644 --- a/src/backend/InvenTree/InvenTree/management/commands/wait_for_db.py +++ b/src/backend/InvenTree/InvenTree/management/commands/wait_for_db.py @@ -13,25 +13,39 @@ class Command(BaseCommand): def handle(self, *args, **kwargs): """Wait till the database is ready.""" - self.stdout.write('Waiting for database...') - connected = False + verbose = int(kwargs.get('verbosity', 0)) > 0 + attempts = kwargs.get('attempts', 10) - while not connected: - time.sleep(2) + if verbose: + self.stdout.write('Waiting for database connection...') + self.stdout.flush() + + while not connected and attempts > 0: + attempts -= 1 try: connection.ensure_connection() connected = True - except OperationalError as e: - self.stdout.write(f'Could not connect to database: {e}') - except ImproperlyConfigured as e: - self.stdout.write(f'Improperly configured: {e}') + except (OperationalError, ImproperlyConfigured): + if verbose: + self.stdout.write('Database connection failed, retrying ...') + self.stdout.flush() else: if not connection.is_usable(): - self.stdout.write('Database configuration is not usable') + if verbose: + self.stdout.write('Database configuration is not usable') + self.stdout.flush() if connected: - self.stdout.write('Database connection successful!') + if verbose: + self.stdout.write('Database connection successful!') + self.stdout.flush() + else: + time.sleep(1) + + if not connected: + self.stderr.write('Failed to connect to database after multiple attempts') + self.stderr.flush() diff --git a/src/backend/InvenTree/InvenTree/metadata.py b/src/backend/InvenTree/InvenTree/metadata.py index 86cbc91229..4d8451e2db 100644 --- a/src/backend/InvenTree/InvenTree/metadata.py +++ b/src/backend/InvenTree/InvenTree/metadata.py @@ -380,6 +380,15 @@ class InvenTreeMetadata(SimpleMetadata): We take the regular DRF metadata and add our own unique flavor """ + from InvenTree.serializers import OptionalField + + if isinstance(field, OptionalField) or issubclass( + field.__class__, OptionalField + ): + # Rehydrate the OptionalField for proper introspection + rehydrated_field = field.serializer_class(**(field.serializer_kwargs or {})) + return self.get_field_info(rehydrated_field) + # Try to add the child property to the dependent field to be used by the super call if self.label_lookup[field] == 'dependent field': field.get_child(raise_exception=True) diff --git a/src/backend/InvenTree/InvenTree/mixins.py b/src/backend/InvenTree/InvenTree/mixins.py index 5489404b10..7d181fb995 100644 --- a/src/backend/InvenTree/InvenTree/mixins.py +++ b/src/backend/InvenTree/InvenTree/mixins.py @@ -6,7 +6,6 @@ from rest_framework import generics, mixins, status from rest_framework.response import Response import data_exporter.mixins -import data_exporter.serializers import importer.mixins from InvenTree.fields import InvenTreeNotesField, OutputConfiguration from InvenTree.helpers import ( @@ -214,20 +213,6 @@ class OutputOptionsMixin: if getattr(cls, 'output_options', None) is not None: schema_for_view_output_options(cls) - def __init__(self) -> None: - """Initialize the mixin. Check that the serializer is compatible.""" - super().__init__() - - # Check that the serializer was defined - if ( - hasattr(self, 'serializer_class') - and isinstance(self.serializer_class, type) - and (not issubclass(self.serializer_class, FilterableSerializerMixin)) - ): - raise Exception( - 'INVE-I2: `OutputOptionsMixin` can only be used with serializers that contain the `FilterableSerializerMixin` mixin' - ) - def get_serializer(self, *args, **kwargs): """Return serializer instance with output options applied.""" request = getattr(self, 'request', None) @@ -241,20 +226,7 @@ class OutputOptionsMixin: context['request'] = request kwargs['context'] = context - serializer = super().get_serializer(*args, **kwargs) - - # Check if the serializer actually can be filtered - makes not much sense to use this mixin without that prerequisite - if isinstance( - serializer, data_exporter.serializers.DataExportOptionsSerializer - ): - # Skip in this instance, special case for determining export options - pass - elif not isinstance(serializer, FilterableSerializerMixin): - raise Exception( - 'INVE-I2: `OutputOptionsMixin` can only be used with serializers that contain the `FilterableSerializerMixin` mixin' - ) - - return serializer + return super().get_serializer(*args, **kwargs) def get_queryset(self): """Return the queryset with output options applied. diff --git a/src/backend/InvenTree/InvenTree/ready.py b/src/backend/InvenTree/InvenTree/ready.py index da850b5285..745d77cfda 100644 --- a/src/backend/InvenTree/InvenTree/ready.py +++ b/src/backend/InvenTree/InvenTree/ready.py @@ -91,25 +91,41 @@ def isCollectingPlugins(): return 'collectplugins' in sys.argv +# This variable is used to cache the result of the isGeneratingSchema function, to prevent multiple executions of the same checks +_IS_GENERATING_SCHEMA: bool | None = None + + +def _setGeneratingSchema(value: bool): + """Set the value of the isGeneratingSchema variable.""" + global _IS_GENERATING_SCHEMA + _IS_GENERATING_SCHEMA = value + return value + + def isGeneratingSchema(): """Return true if schema generation is being executed.""" + global _IS_GENERATING_SCHEMA + + if _IS_GENERATING_SCHEMA is not None: + return _IS_GENERATING_SCHEMA + if isInServerThread() or isInWorkerThread(): - return False + return _setGeneratingSchema(False) if isRunningMigrations() or isRunningBackup() or isRebuildingData(): - return False + return _setGeneratingSchema(False) if isImportingData(): - return False + return _setGeneratingSchema(False) if isInTestMode(): - return False + return _setGeneratingSchema(False) if isWaitingForDatabase(): - return False + return _setGeneratingSchema(False) if isCollectingPlugins(): - return False + return _setGeneratingSchema(False) # Additional set of commands which should not trigger schema generation excluded_commands = [ @@ -129,7 +145,7 @@ def isGeneratingSchema(): ] if any(cmd in sys.argv for cmd in excluded_commands): - return False + return _setGeneratingSchema(False) included_commands = [ 'schema', @@ -142,14 +158,14 @@ def isGeneratingSchema(): ] if any(cmd in sys.argv for cmd in included_commands): - return True + return _setGeneratingSchema(True) # This is a very inefficient call - so we only use it as a last resort result = any('drf_spectacular' in frame.filename for frame in inspect.stack()) if not result: # We should only get here if we *are* generating schema - # Raise a warning, so that deevlopers can add extra checks above + # Raise a warning, so that developers can add extra checks above if settings.DEBUG: logger.warning( @@ -157,7 +173,7 @@ def isGeneratingSchema(): ) logger.warning('sys.argv: %s', sys.argv) - return result + return _setGeneratingSchema(result) def isInWorkerThread(): @@ -207,6 +223,14 @@ def readOnlyCommands(): def isReadOnlyCommand(): """Return True if the current command is a read-only command, which should not trigger any database writes.""" + if ( + isImportingData() + or isRunningMigrations() + or isRebuildingData() + or isRunningBackup() + ): + return True + return any(cmd in sys.argv for cmd in readOnlyCommands()) diff --git a/src/backend/InvenTree/InvenTree/sanitizer.py b/src/backend/InvenTree/InvenTree/sanitizer.py index 55dbd24770..ea5936c65a 100644 --- a/src/backend/InvenTree/InvenTree/sanitizer.py +++ b/src/backend/InvenTree/InvenTree/sanitizer.py @@ -345,4 +345,8 @@ def sanitize_svg( link_rel=None, ) + # Replace non-breaking spaces with regular spaces to prevent SVG rendering issues + for nbsp in [' ', ' ']: + cleaned = cleaned.replace(nbsp, ' ') + return cleaned diff --git a/src/backend/InvenTree/InvenTree/schema.py b/src/backend/InvenTree/InvenTree/schema.py index 8ec7392130..93050be7ce 100644 --- a/src/backend/InvenTree/InvenTree/schema.py +++ b/src/backend/InvenTree/InvenTree/schema.py @@ -55,9 +55,17 @@ class ExtendedAutoSchema(AutoSchema): result_id = super().get_operation_id() # rename bulk actions to deconflict with single action operation_id - if (self.method == 'DELETE' and self.is_bulk_action('BulkDeleteMixin')) or ( - (self.method == 'PUT' or self.method == 'PATCH') - and self.is_bulk_action('BulkUpdateMixin') + if ( + (self.method == 'DELETE' and self.is_bulk_action('BulkDeleteMixin')) + or ( + self.method == 'DELETE' + and self.is_bulk_action('BulkDeleteViewsetMixin') + and self.view.action == 'bulk_delete' + ) + or ( + (self.method == 'PUT' or self.method == 'PATCH') + and self.is_bulk_action('BulkUpdateMixin') + ) ): action = self.method_mapping[self.method.lower()] result_id = result_id.replace(action, 'bulk_' + action) @@ -81,7 +89,11 @@ class ExtendedAutoSchema(AutoSchema): # drf-spectacular doesn't support a body on DELETE endpoints because the semantics are not well-defined and # OpenAPI recommends against it. This allows us to generate a schema that follows existing behavior. - if self.method == 'DELETE' and self.is_bulk_action('BulkDeleteMixin'): + if (self.method == 'DELETE' and self.is_bulk_action('BulkDeleteMixin')) or ( + self.method == 'DELETE' + and getattr(self.view, 'action', None) == 'bulk_delete' + and self.is_bulk_action('BulkDeleteViewsetMixin') + ): original_method = self.method self.method = 'PUT' request_body = self._get_request_body() diff --git a/src/backend/InvenTree/InvenTree/serializers.py b/src/backend/InvenTree/InvenTree/serializers.py index 5338fa714c..b739143b8a 100644 --- a/src/backend/InvenTree/InvenTree/serializers.py +++ b/src/backend/InvenTree/InvenTree/serializers.py @@ -2,8 +2,9 @@ from collections import OrderedDict from copy import deepcopy +from dataclasses import dataclass from decimal import Decimal -from typing import Any, Optional +from typing import Optional from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ValidationError as DjangoValidationError @@ -21,9 +22,9 @@ from rest_framework.exceptions import ValidationError from rest_framework.fields import empty from rest_framework.mixins import ListModelMixin from rest_framework.permissions import SAFE_METHODS -from rest_framework.serializers import DecimalField +from rest_framework.serializers import DecimalField, Serializer from rest_framework.utils import model_meta -from taggit.serializers import TaggitSerializer, TagListSerializerField +from taggit.serializers import TaggitSerializer import common.models as common_models import InvenTree.ready @@ -33,94 +34,239 @@ from InvenTree.helpers import str2bool from InvenTree.helpers_model import getModelsWithMixin -# region path filtering -class FilterableSerializerField: - """Mixin to mark serializer as filterable. +@dataclass +class OptionalField: + """DataClass used to optionally enable a serializer field. - This needs to be used in conjunction with `enable_filter` on the serializer field! - """ + This is used in conjunction with the `FilterableSerializerMixin` to allow + dynamic inclusion or exclusion of serializer fields at runtime. - is_filterable = None - is_filterable_vals = {} + Adding OptionalField instances to a serializer class is more "efficient" + than directly adding the field (and later removing it), + as the field is never instantiated unless it is required. - # Options for automatic queryset prefetching - prefetch_fields: Optional[list[str]] = None + Additionally, you can specify prefetch fields which will be applied + to the queryset, *only* if the field is included in the final serializer. - def __init__(self, *args, **kwargs): - """Initialize the serializer.""" - self.is_filterable = kwargs.pop('is_filterable', None) - self.is_filterable_vals = kwargs.pop('is_filterable_vals', {}) - self.prefetch_fields = kwargs.pop('prefetch_fields', None) + This allows for optimization of database queries based only on the requested data. - super().__init__(*args, **kwargs) - - -def enable_filter( - func: Any, - default_include: bool = False, - filter_name: Optional[str] = None, - filter_by_query: bool = True, - prefetch_fields: Optional[list[str]] = None, -): - """Decorator for marking a serializer field as filterable. - - This can be customized by passing in arguments. This only works in conjunction with serializer fields or serializers that contain the `FilterableSerializerField` mixin. - - Args: - func: The serializer field to mark as filterable. Will automatically be passed when used as a decorator. - default_include (bool): If True, the field will be included by default unless explicitly excluded. If False, the field will be excluded by default unless explicitly included. - filter_name (str, optional): The name of the filter parameter to use in the URL. If None, the function name of the (decorated) function will be used. - filter_by_query (bool): If True, also look for filter parameters in the request query parameters. - prefetch_fields (list of str, optional): List of related fields to prefetch when this field is included. This can be used to optimize database queries. - - Returns: - The decorated serializer field, marked as filterable. - """ - # Ensure this function can be actually filtered - if not issubclass(func.__class__, FilterableSerializerField): - raise TypeError( - 'INVE-I2: `enable_filter` can only be applied to serializer fields / serializers that contain the `FilterableSerializerField` mixin!' + Example: + class MySerializer(FilterableSerializerMixin, serializers.ModelSerializer): + my_optional_field = OptionalField( + serializer_class=serializers.CharField, + default_include=False, + filter_name='include_my_field', + serializer_kwargs={ + 'help_text': 'This is an optional field', + 'read_only': True, + }, + prefetch_fields=['related_field'], ) - # Mark the function as filterable - func._kwargs['is_filterable'] = True - func._kwargs['is_filterable_vals'] = { - 'default': default_include, - 'filter_name': filter_name if filter_name else func.field_name, - 'filter_by_query': filter_by_query, - } + """ - # Attach queryset prefetching information - func._kwargs['prefetch_fields'] = prefetch_fields - - return func + serializer_class: Serializer + serializer_kwargs: Optional[dict] = None + default_include: bool = False + filter_name: Optional[str] = None + filter_by_query: bool = True + prefetch_fields: Optional[list[str]] = None class FilterableSerializerMixin: """Mixin that enables filtering of marked fields on a serializer. - Use the `enable_filter` decorator to mark serializer fields as filterable. + Use the `OptionalField` helper class to mark serializer fields as filterable. This introduces overhead during initialization, so only use this mixin when necessary. - If you need to mark a serializer as filterable but it does not contain any filterable fields, set `no_filters = True` to avoid getting an exception that protects against over-application of this mixin. """ - _was_filtered = False - no_filters = False - """If True, do not raise an exception if no filterable fields are found.""" - filter_on_query = True - """If True, also look for filter parameters in the request query parameters.""" + optional_filters: dict = None + fields_to_remove: set = None + optional_fields: set = None + filter_on_query: bool = True def __init__(self, *args, **kwargs): """Initialization routine for the serializer. This gathers and applies filters through kwargs.""" - # add list_serializer_class to meta if not present - reduces duplication - if not isinstance(self, FilterableListSerializer) and ( - not hasattr(self.Meta, 'list_serializer_class') - ): - self.Meta.list_serializer_class = FilterableListSerializer + # Extract some useful context information for later use + context = kwargs.get('context', {}) + self.request = context.get('request', None) or getattr(self, 'request', None) + self.request_query_params = ( + dict(getattr(self.request, 'query_params', {})) if self.request else {} + ) + + self.gather_optional_fields(kwargs) - self.gather_filters(kwargs) super().__init__(*args, **kwargs) - self.do_filtering() + + # Ensure any fields we are *not* using are removed + for field_name in self.fields_to_remove: + self.fields.pop(field_name, None) + + def is_exporting(self) -> bool: + """Determine if we are exporting data.""" + return getattr(self, '_exporting_data', False) + + def is_field_included( + self, field_name: str, field: OptionalField, kwargs: dict + ) -> bool: + """Determine at runtime whether an OptionalField should be included. + + Arguments: + field_name: Name of the field + field: The OptionalField instance + kwargs: The kwargs provided to the serializer instance + + Returns: + True if the field should be included, False otherwise. + + Order of operations: + + - If we are generating the schema, always include the field + - If this is a write request (POST, PUT, PATCH) and we are not exporting, always include the field + - If this is a top-level serializer, check the request query parameters for the filter name + - Check the kwargs provided to the serializer instance + - Finally, fall back to the default_include value for the field itself + """ + field_ref = field.filter_name or field_name + + # If we have already found a value for this filter, use it + # This allows multiple optional fields to share the same filter value + cached_value = self.optional_filters.get(field_ref, None) + + if cached_value is not None: + return cached_value + + # First, check kwargs provided to the serializer instance + # We also pop the value to avoid issues with nested serializers + value = kwargs.pop(field_ref, None) + + # We do not want to pop fields while generating the schema + if InvenTree.ready.isGeneratingSchema(): + return True + + if value is not None: + # Cache the value for future reference + self.optional_filters[field_ref] = value + + field_kwargs = field.serializer_kwargs or {} + + # Skip filtering for a write request - all fields should be present for data creation + if method := getattr(self.request, 'method', None): + if method not in SAFE_METHODS and not self.is_exporting(): + return True + else: + # Ignore write_only fields for read requests + if field_kwargs.get('write_only', False): + return False + + # For a top-level serializer, check request query parameters + if self.request and self.filter_on_query and field.filter_by_query: + param_value = self.request.query_params.get(field_ref, None) + + if param_value is not None: + # Convert from list to single value if needed + if type(param_value) == list and len(param_value) == 1: + param_value = param_value[0] + + value = str2bool(param_value) + + # Cache the value for future reference + self.optional_filters[field_ref] = value + + if value is None: + value = field.default_include + + return value + + def find_optional_fields(self): + """Find all optional fields defined on this serializer.""" + optional_fields = {} + + # Walk upwards through the class hierarchy + seen_vars = set() + + for base in self.__class__.__mro__: + for field_name, field in vars(base).items(): + if field_name in seen_vars: + continue + + seen_vars.add(field_name) + + if field and isinstance(field, OptionalField): + optional_fields[field_name] = field + + return optional_fields + + def gather_optional_fields(self, kwargs): + """Determine which optional fields will be included on this serializer. + + Note that there may be instances of OptionalField in the field set, + which need to either be instantiated or removed. + """ + self.optional_filters = {} + self.prefetch_list = set() + self.fields_to_remove = set() + self.optional_fields = set() + + for field_name, field in self.find_optional_fields().items(): + if self.is_field_included(field_name, field, kwargs): + self.optional_fields.add(field_name) + # Add prefetch information + if field.prefetch_fields: + for pf in field.prefetch_fields: + self.prefetch_list.add(pf) + else: + self.fields_to_remove.add(field_name) + + def get_field_names(self, declared_fields, info): + """Remove unused fields before returning field names.""" + field_names = super().get_field_names(declared_fields, info) + + # Add any optional fields which are included + for field_name in self.optional_fields: + if field_name not in field_names: + field_names.append(field_name) + + # Remove any fields which are marked for removal + for field_name in self.fields_to_remove: + if field_name in field_names: + field_names.remove(field_name) + + return field_names + + def build_optional_field(self, field_name: str): + """Build an optional field, based on the provided field name.""" + field = getattr(self, field_name, None) + + if field and isinstance(field, OptionalField): + serializer_kwargs = {**field.serializer_kwargs} or {} + return field.serializer_class, serializer_kwargs + + def build_relational_field(self, field_name, relation_info): + """Handle a special case where an OptionalField shadows a model relation.""" + if field_name in self.optional_fields: + if field := self.build_optional_field(field_name): + return field + + return super().build_relational_field(field_name, relation_info) + + def build_property_field(self, field_name, model_class): + """Handle a special case where an OptionalField shadows a model property.""" + if field_name in self.optional_fields: + if field := self.build_optional_field(field_name): + return field + + return super().build_property_field(field_name, model_class) + + def build_unknown_field(self, field_name, model_class): + """Perform lazy initialization of OptionalFields. + + The DRF framework calls this method when it encounters a field which is not yet initialized. + """ + if field := self.build_optional_field(field_name): + return field + + return super().build_unknown_field(field_name, model_class) def prefetch_queryset(self, queryset: QuerySet) -> QuerySet: """Apply any prefetching to the queryset based on the optionally included fields. @@ -140,157 +286,48 @@ class FilterableSerializerMixin: if getattr(request, '_metadata_requested', False): return queryset - # Gather up the set of simple 'prefetch' fields and functions - prefetch_fields = set() - - filterable_fields = [ - field - for field in self.fields.values() - if getattr(field, 'is_filterable', None) - ] - - for field in filterable_fields: - if prefetch_names := getattr(field, 'prefetch_fields', None): - for pf in prefetch_names: - prefetch_fields.add(pf) - - if prefetch_fields and len(prefetch_fields) > 0: - queryset = queryset.prefetch_related(*list(prefetch_fields)) + if self.prefetch_list and len(self.prefetch_list) > 0: + queryset = queryset.prefetch_related(*list(self.prefetch_list)) return queryset - def gather_filters(self, kwargs) -> None: - """Gather filterable fields through introspection.""" - context = kwargs.get('context', {}) - request = context.get('request', None) or getattr(self, 'request', None) - - # Gather query parameters from the request context - query_params = dict(getattr(request, 'query_params', {})) if request else {} - - # Fast exit if this has already been done or would not have any effect - if getattr(self, '_was_filtered', False) or not hasattr(self, 'fields'): - return - - # Actually gather the filterable fields - # Also see `enable_filter` where` is_filterable and is_filterable_vals are set - self.filter_targets: dict[str, dict] = { - str(k): {'serializer': a, **getattr(a, 'is_filterable_vals', {})} - for k, a in self.fields.items() - if getattr(a, 'is_filterable', None) - } - - # Remove filter args from kwargs to avoid issues with super().__init__ - popped_kwargs = {} # store popped kwargs as a arg might be reused for multiple fields - tgs_vals: dict[str, bool] = {} - for k, v in self.filter_targets.items(): - pop_ref = v['filter_name'] or k - val = kwargs.pop(pop_ref, popped_kwargs.get(pop_ref)) - # Optionally also look in query parameters - # Note that we only do this for a top-level serializer, to avoid issues with nested serializers - if ( - request - and val is None - and self.filter_on_query - and v.get('filter_by_query', True) - ): - val = query_params.pop(pop_ref, None) - - if isinstance(val, list) and len(val) == 1: - val = val[0] - - if val: # Save popped value for reuse - popped_kwargs[pop_ref] = val - tgs_vals[k] = ( - str2bool(val) if isinstance(val, (str, int, float)) else val - ) # Support for various filtering style for backwards compatibility - - self.filter_target_values = tgs_vals - self._was_filtered = True - - # Ensure this mixin is not broadly applied as it is expensive on scale (total CI time increased by 21% when running all coverage tests) - if len(self.filter_targets) == 0 and not self.no_filters: - raise Exception( - 'INVE-I2: No filter targets found in fields, remove `PathScopedMixin`' - ) - - def do_filtering(self) -> None: - """Do the actual filtering.""" - # This serializer might not contain filters or we do not want to pop fields while generating the schema - if ( - not hasattr(self, 'filter_target_values') - or InvenTree.ready.isGeneratingSchema() - ): - return - - is_exporting = getattr(self, '_exporting_data', False) - - # Skip filtering for a write requests - all fields should be present for data creation - if request := self.context.get('request', None): - if method := getattr(request, 'method', None): - if method not in SAFE_METHODS and not is_exporting: - return - - # Throw out fields which are not requested (either by default or explicitly) - for k, v in self.filter_target_values.items(): - # See `enable_filter` where` is_filterable and is_filterable_vals are set - value = v if v is not None else bool(self.filter_targets[k]['default']) - if value is not True: - self.fields.pop(k, None) - - -# special serializers which allow filtering -class FilterableListSerializer( - FilterableSerializerField, FilterableSerializerMixin, serializers.ListSerializer -): - """Custom ListSerializer which allows filtering of fields.""" - - -# special serializer fields which allow filtering -class FilterableListField(FilterableSerializerField, serializers.ListField): - """Custom ListField which allows filtering.""" - - -class FilterableSerializerMethodField( - FilterableSerializerField, serializers.SerializerMethodField -): - """Custom SerializerMethodField which allows filtering.""" - - -class FilterableDateTimeField(FilterableSerializerField, serializers.DateTimeField): - """Custom DateTimeField which allows filtering.""" - - -class FilterableFloatField(FilterableSerializerField, serializers.FloatField): - """Custom FloatField which allows filtering.""" - - -class FilterableCharField(FilterableSerializerField, serializers.CharField): - """Custom CharField which allows filtering.""" - - -class FilterableIntegerField(FilterableSerializerField, serializers.IntegerField): - """Custom IntegerField which allows filtering.""" - - -class FilterableTagListField(FilterableSerializerField, TagListSerializerField): - """Custom TagListSerializerField which allows filtering.""" - - class Meta: - """Empty Meta class.""" - - -# endregion - class EmptySerializer(serializers.Serializer): """Empty serializer for use in testing.""" -class InvenTreeMoneySerializer(FilterableSerializerField, MoneyField): +class TreePathSerializer(serializers.Serializer): + """Serializer field for representing a tree path.""" + + class Meta: + """Metaclass options.""" + + fields = [ + 'pk', + 'name', + # Any fields after this point are optional, and can be included via extra_fields + 'icon', + ] + + def __init__(self, *args, extra_fields: Optional[list[str]] = None, **kwargs): + """Initialize the TreePathSerializer.""" + super().__init__(*args, **kwargs) + + allowed_fields = ['pk', 'name', *(extra_fields or [])] + + for field in list(self.fields.keys()): + if field not in allowed_fields: + self.fields.pop(field, None) + + pk = serializers.IntegerField(read_only=True) + name = serializers.CharField(read_only=True) + icon = serializers.CharField(required=False, read_only=True) + + +class InvenTreeMoneySerializer(MoneyField): """Custom serializer for 'MoneyField', which ensures that passed values are numerically valid. Ref: https://github.com/django-money/django-money/blob/master/djmoney/contrib/django_rest_framework/fields.py - This field allows filtering. """ def __init__(self, *args, **kwargs): @@ -477,7 +514,7 @@ class DependentField(serializers.Field): return None -class InvenTreeModelSerializer(FilterableSerializerField, serializers.ModelSerializer): +class InvenTreeModelSerializer(serializers.ModelSerializer): """Inherits the standard Django ModelSerializer class, but also ensures that the underlying model class data are checked on validation.""" # Switch out URLField mapping diff --git a/src/backend/InvenTree/InvenTree/setting/db_backend.py b/src/backend/InvenTree/InvenTree/setting/db_backend.py index e90f01c8f9..f053d4d7bd 100644 --- a/src/backend/InvenTree/InvenTree/setting/db_backend.py +++ b/src/backend/InvenTree/InvenTree/setting/db_backend.py @@ -1,5 +1,7 @@ """Configuration settings specific to a particular database backend.""" +from pathlib import Path + import structlog from InvenTree.config import get_boolean_setting, get_setting @@ -7,6 +9,62 @@ from InvenTree.config import get_boolean_setting, get_setting logger = structlog.get_logger('inventree') +def get_db_backend(): + """Return the database backend configuration.""" + db_config = { + 'ENGINE': get_setting('INVENTREE_DB_ENGINE', 'database.engine', None), + 'NAME': get_setting('INVENTREE_DB_NAME', 'database.name', None), + 'USER': get_setting('INVENTREE_DB_USER', 'database.user', None), + 'PASSWORD': get_setting('INVENTREE_DB_PASSWORD', 'database.password', None), + 'HOST': get_setting('INVENTREE_DB_HOST', 'database.host', None), + 'PORT': get_setting('INVENTREE_DB_PORT', 'database.port', 5432, typecast=int), + 'OPTIONS': get_setting( + 'INVENTREE_DB_OPTIONS', 'database.options', {}, typecast=dict + ) + or {}, + } + + # Check for required keys + required_keys = ['ENGINE', 'NAME'] + + for key in required_keys: + if not db_config[key]: + raise ValueError( + f'Missing required database configuration key: INVENTREE_DB_{key}' + ) + + DB_ENGINE = db_config['ENGINE'].lower() + + # Correct common misspelling + if DB_ENGINE == 'sqlite': + DB_ENGINE = 'sqlite3' # pragma: no cover + + if DB_ENGINE in ['sqlite3', 'postgresql', 'mysql']: + # Prepend the required python module string + DB_ENGINE = f'django.db.backends.{DB_ENGINE}' + db_config['ENGINE'] = DB_ENGINE + + if 'sqlite' in DB_ENGINE: + db_name = str(Path(db_config['NAME']).resolve()) + db_config['NAME'] = db_name + + logger.info('DB_ENGINE: %s', DB_ENGINE) + logger.info('DB_NAME: %s', db_config['NAME']) + logger.info('DB_HOST: %s', db_config.get('HOST', "''")) + + # Set testing options for the database + db_config['TEST'] = {'CHARSET': 'utf8'} + + # Set collation option for mysql test database + if 'mysql' in DB_ENGINE: + db_config['TEST']['COLLATION'] = 'utf8_general_ci' # pragma: no cover + + # Specify database specific configuration + set_db_options(DB_ENGINE, db_config['OPTIONS']) + + return db_config + + def set_db_options(engine: str, db_options: dict): """Update database options based on the specified database backend. diff --git a/src/backend/InvenTree/InvenTree/setting/ldap.py b/src/backend/InvenTree/InvenTree/setting/ldap.py new file mode 100644 index 0000000000..6e6f57989f --- /dev/null +++ b/src/backend/InvenTree/InvenTree/setting/ldap.py @@ -0,0 +1,139 @@ +"""Configuration of LDAP support for InvenTree.""" + +from InvenTree.config import get_boolean_setting, get_setting + + +def get_ldap_config(debug: bool = False) -> dict: + """Return a dictionary of LDAP configuration settings. + + The returned settings will be updated into the globals() object, + and will be used to configure the LDAP authentication backend. + """ + import django_auth_ldap.config # type: ignore[unresolved-import] + import ldap # type: ignore[unresolved-import] + + # get global options from dict and use ldap.OPT_* as keys and values + global_options_dict = get_setting( + 'INVENTREE_LDAP_GLOBAL_OPTIONS', + 'ldap.global_options', + default_value=None, + typecast=dict, + ) + + global_options = {} + + for k, v in global_options_dict.items(): + # keys are always ldap.OPT_* constants + k_attr = getattr(ldap, k, None) + if not k.startswith('OPT_') or k_attr is None: + print(f"[LDAP] ldap.global_options, key '{k}' not found, skipping...") + continue + + # values can also be other strings, e.g. paths + v_attr = v + if v.startswith('OPT_'): + v_attr = getattr(ldap, v, None) + + if v_attr is None: + print(f"[LDAP] ldap.global_options, value key '{v}' not found, skipping...") + continue + + global_options[k_attr] = v_attr + + if debug: + print('[LDAP] ldap.global_options =', global_options) + + group_type_class = get_setting( + 'INVENTREE_LDAP_GROUP_TYPE_CLASS', + 'ldap.group_type_class', + 'GroupOfUniqueNamesType', + str, + ) + + group_type_class_args = get_setting( + 'INVENTREE_LDAP_GROUP_TYPE_CLASS_ARGS', 'ldap.group_type_class_args', [], list + ) + + group_type_class_kwargs = get_setting( + 'INVENTREE_LDAP_GROUP_TYPE_CLASS_KWARGS', + 'ldap.group_type_class_kwargs', + {'name_attr': 'cn'}, + dict, + ) + + group_object_class = get_setting( + 'INVENTREE_LDAP_GROUP_OBJECT_CLASS', + 'ldap.group_object_class', + 'groupOfUniqueNames', + str, + ) + + ldap_config = { + 'AUTH_LDAP_GLOBAL_OPTIONS': global_options, + 'AUTH_LDAP_SERVER_URI': get_setting( + 'INVENTREE_LDAP_SERVER_URI', 'ldap.server_uri' + ), + 'AUTH_LDAP_START_TLS': get_boolean_setting( + 'INVENTREE_LDAP_START_TLS', 'ldap.start_tls', False + ), + 'AUTH_LDAP_BIND_DN': get_setting('INVENTREE_LDAP_BIND_DN', 'ldap.bind_dn'), + 'AUTH_LDAP_BIND_PASSWORD': get_setting( + 'INVENTREE_LDAP_BIND_PASSWORD', 'ldap.bind_password' + ), + 'AUTH_LDAP_USER_SEARCH': django_auth_ldap.config.LDAPSearch( + get_setting('INVENTREE_LDAP_SEARCH_BASE_DN', 'ldap.search_base_dn'), + ldap.SCOPE_SUBTREE, + str( + get_setting( + 'INVENTREE_LDAP_SEARCH_FILTER_STR', + 'ldap.search_filter_str', + '(uid= %(user)s)', + ) + ), + ), + 'AUTH_LDAP_USER_DN_TEMPLATE': get_setting( + 'INVENTREE_LDAP_USER_DN_TEMPLATE', 'ldap.user_dn_template' + ), + 'AUTH_LDAP_USER_ATTR_MAP': get_setting( + 'INVENTREE_LDAP_USER_ATTR_MAP', + 'ldap.user_attr_map', + {'first_name': 'givenName', 'last_name': 'sn', 'email': 'mail'}, + dict, + ), + 'AUTH_LDAP_ALWAYS_UPDATE_USER': get_boolean_setting( + 'INVENTREE_LDAP_ALWAYS_UPDATE_USER', 'ldap.always_update_user', True + ), + 'AUTH_LDAP_CACHE_TIMEOUT': get_setting( + 'INVENTREE_LDAP_CACHE_TIMEOUT', 'ldap.cache_timeout', 3600, int + ), + 'AUTH_LDAP_MIRROR_GROUPS': get_boolean_setting( + 'INVENTREE_LDAP_MIRROR_GROUPS', 'ldap.mirror_groups', False + ), + 'AUTH_LDAP_GROUP_OBJECT_CLASS': group_object_class, + 'AUTH_LDAP_GROUP_SEARCH': django_auth_ldap.config.LDAPSearch( + get_setting('INVENTREE_LDAP_GROUP_SEARCH', 'ldap.group_search'), + ldap.SCOPE_SUBTREE, + f'(objectClass={group_object_class})', + ), + 'AUTH_LDAP_GROUP_TYPE_CLASS': group_type_class, + 'AUTH_LDAP_GROUP_TYPE_CLASS_ARGS': [*group_type_class_args], + 'AUTH_LDAP_GROUP_TYPE_CLASS_KWARGS': {**group_type_class_kwargs}, + 'AUTH_LDAP_GROUP_TYPE': getattr(django_auth_ldap.config, group_type_class)( + *group_type_class_args, **group_type_class_kwargs + ), + 'AUTH_LDAP_REQUIRE_GROUP': get_setting( + 'INVENTREE_LDAP_REQUIRE_GROUP', 'ldap.require_group' + ), + 'AUTH_LDAP_DENY_GROUP': get_setting( + 'INVENTREE_LDAP_DENY_GROUP', 'ldap.deny_group' + ), + 'AUTH_LDAP_USER_FLAGS_BY_GROUP': get_setting( + 'INVENTREE_LDAP_USER_FLAGS_BY_GROUP', + 'ldap.user_flags_by_group', + default_value=None, + typecast=dict, + ), + 'AUTH_LDAP_FIND_GROUP_PERMS': True, + } + + return ldap_config diff --git a/src/backend/InvenTree/InvenTree/setting/tracing.py b/src/backend/InvenTree/InvenTree/setting/tracing.py new file mode 100644 index 0000000000..59a667b71d --- /dev/null +++ b/src/backend/InvenTree/InvenTree/setting/tracing.py @@ -0,0 +1,61 @@ +"""Start-up configuration options for InvenTree tracing integrations.""" + +import structlog + +from InvenTree.config import get_boolean_setting, get_setting +from InvenTree.tracing import setup_instruments, setup_tracing + +logger = structlog.get_logger('inventree') + + +def configure_tracing(db_engine: str, enabled: bool, tags: dict) -> dict: + """Configure tracing integrations for InvenTree. + + Arguments: + db_engine: The database engine being used + enabled: Whether tracing is enabled + tags: A dictionary of tags to be included in tracing spans, with keys prefixed by + """ + endpoint = get_setting('INVENTREE_TRACING_ENDPOINT', 'tracing.endpoint', None) + headers = ( + get_setting('INVENTREE_TRACING_HEADERS', 'tracing.headers', None, typecast=dict) + or {} + ) + + if enabled and endpoint: + logger.info('Tracing enabled with endpoint: %s', endpoint) + + TRACING_DETAILS = { + 'endpoint': endpoint, + 'headers': headers, + 'resources_input': { + **{'inventree.env.' + k: v for k, v in tags.items()}, + **get_setting( + 'INVENTREE_TRACING_RESOURCES', + 'tracing.resources', + default_value=None, + typecast=dict, + ), + }, + 'console': get_boolean_setting( + 'INVENTREE_TRACING_CONSOLE', 'tracing.console', False + ), + 'auth': get_setting( + 'INVENTREE_TRACING_AUTH', 'tracing.auth', default_value=None, typecast=dict + ), + 'is_http': get_setting('INVENTREE_TRACING_IS_HTTP', 'tracing.is_http', True), + 'append_http': get_boolean_setting( + 'INVENTREE_TRACING_APPEND_HTTP', 'tracing.append_http', True + ), + } + + if not enabled: + return None + + if endpoint: + setup_tracing(**TRACING_DETAILS) + setup_instruments(db_engine) + else: + logger.warning('OpenTelemetry tracing not enabled because endpoint is not set') + + return TRACING_DETAILS diff --git a/src/backend/InvenTree/InvenTree/setting/worker.py b/src/backend/InvenTree/InvenTree/setting/worker.py new file mode 100644 index 0000000000..bef1380bd2 --- /dev/null +++ b/src/backend/InvenTree/InvenTree/setting/worker.py @@ -0,0 +1,88 @@ +"""Configuration settings for the InvenTree background worker process.""" + +import sys + +from InvenTree.config import get_setting + + +def get_worker_config( + db_engine: str, + global_cache: bool = False, + sentry_dsn: str = '', + debug: bool = False, +) -> dict: + """Return a dictionary of configuration settings for the background worker. + + Arguments: + db_engine: The database engine being used (e.g. 'sqlite', 'postgresql', 'mysql') + global_cache: Whether a global redis cache is enabled + sentry_dsn: The DSN for sentry.io integration (if enabled) + debug: Whether the application is running in debug mode + + Ref: https://django-q2.readthedocs.io/en/master/configure.html + """ + BACKGROUND_WORKER_TIMEOUT = int( + get_setting('INVENTREE_BACKGROUND_TIMEOUT', 'background.timeout', 90) + ) + + # Set the retry time for background workers to be slightly longer than the worker timeout, to ensure that workers have time to timeout before being retried + BACKGROUND_WORKER_RETRY = max( + int(get_setting('INVENTREE_BACKGROUND_RETRY', 'background.retry', 300)), + BACKGROUND_WORKER_TIMEOUT + 120, + ) + + BACKGROUND_WORKER_ATTEMPTS = int( + get_setting('INVENTREE_BACKGROUND_MAX_ATTEMPTS', 'background.max_attempts', 5) + ) + + # Prevent running multiple background workers if global cache is disabled + # This is to prevent scheduling conflicts due to the lack of a shared cache + BACKGROUND_WORKER_COUNT = int( + get_setting('INVENTREE_BACKGROUND_WORKERS', 'background.workers', 4) + ) + + # If global cache is disabled, we cannot run multiple background workers + if not global_cache: + BACKGROUND_WORKER_COUNT = 1 + + # If running with SQLite, limit background worker threads to 1 to prevent database locking issues + if 'sqlite' in db_engine: + BACKGROUND_WORKER_COUNT = 1 + + # Check if '--sync' was passed in the command line + if '--sync' in sys.argv and '--noreload' in sys.argv and debug: + SYNC_TASKS = True + else: + SYNC_TASKS = False + + # Clean up sys.argv so Django doesn't complain about an unknown argument + if SYNC_TASKS: + sys.argv.remove('--sync') + + # django-q background worker configuration + config = { + 'name': 'InvenTree', + 'label': 'Background Tasks', + 'workers': BACKGROUND_WORKER_COUNT, + 'timeout': BACKGROUND_WORKER_TIMEOUT, + 'retry': BACKGROUND_WORKER_RETRY, + 'max_attempts': BACKGROUND_WORKER_ATTEMPTS, + 'save_limit': 1000, + 'queue_limit': 50, + 'catch_up': False, + 'bulk': 10, + 'orm': 'default', + 'cache': 'default', + 'sync': SYNC_TASKS, + 'poll': 1.5, + } + + if global_cache: + # If using external redis cache, make the cache the broker for Django Q + config['django_redis'] = 'worker' + + if sentry_dsn: + # If sentry is enabled, configure django-q to report errors to sentry + config['error_reporter'] = {'sentry': {'dsn': sentry_dsn}} + + return config diff --git a/src/backend/InvenTree/InvenTree/settings.py b/src/backend/InvenTree/InvenTree/settings.py index 8fa1e571db..3aa32669be 100644 --- a/src/backend/InvenTree/InvenTree/settings.py +++ b/src/backend/InvenTree/InvenTree/settings.py @@ -12,7 +12,6 @@ database setup in this file. import logging import os import sys -from pathlib import Path from typing import Optional from zoneinfo import ZoneInfo, ZoneInfoNotFoundError @@ -33,7 +32,16 @@ from InvenTree.version import checkMinPythonVersion, inventreeCommitHash from users.oauth2_scopes import oauth2_scopes from . import config -from .setting import db_backend, locales, markdown, spectacular, storages +from .setting import ( + db_backend, + ldap, + locales, + markdown, + spectacular, + storages, + tracing, + worker, +) try: import django_stubs_ext @@ -81,6 +89,8 @@ DEBUG = get_boolean_setting('INVENTREE_DEBUG', 'debug', False) # Internal flag to determine if we are running in docker mode DOCKER = get_boolean_setting('INVENTREE_DOCKER', default_value=False) +AUTO_UPDATE = get_boolean_setting('INVENTREE_AUTO_UPDATE', 'auto_update', False) + # Configure logging settings LOG_LEVEL = get_setting('INVENTREE_LOG_LEVEL', 'log_level', 'WARNING') JSON_LOG = get_boolean_setting('INVENTREE_JSON_LOG', 'json_log', False) @@ -201,6 +211,11 @@ PLUGINS_INSTALL_DISABLED = get_boolean_setting( 'INVENTREE_PLUGIN_NOINSTALL', 'plugin_noinstall', False ) +if not PLUGINS_ENABLED: + PLUGINS_INSTALL_DISABLED = ( + True # If plugins are disabled, also disable installation + ) + PLUGIN_FILE = config.get_plugin_file() # Plugin test settings @@ -217,9 +232,7 @@ PLUGIN_TESTING_EVENTS_ASYNC = False # Flag if events are tested asynchronously PLUGIN_TESTING_RELOAD = False # Flag if plugin reloading is in testing (check_reload) # Plugin development settings -PLUGIN_DEV_SLUG = ( - get_setting('INVENTREE_PLUGIN_DEV_SLUG', 'plugin_dev.slug') if DEBUG else None -) +PLUGIN_DEV_SLUG = get_setting('INVENTREE_PLUGIN_DEV_SLUG', 'plugin_dev.slug') PLUGIN_DEV_HOST = get_setting( 'INVENTREE_PLUGIN_DEV_HOST', 'plugin_dev.host', 'http://localhost:5174' @@ -381,8 +394,11 @@ MIDDLEWARE = CONFIG.get( # In DEBUG mode, add support for django-silk # Ref: https://silk.readthedocs.io/en/latest/ -DJANGO_SILK_ENABLED = DEBUG and get_boolean_setting( # pragma: no cover - 'INVENTREE_DEBUG_SILK', 'debug_silk', False +DJANGO_SILK_ENABLED = ( + get_boolean_setting( # pragma: no cover + 'INVENTREE_DEBUG_SILK', 'debug_silk', False + ) + and DEBUG ) if DJANGO_SILK_ENABLED: # pragma: no cover @@ -396,8 +412,11 @@ if DJANGO_SILK_ENABLED: # pragma: no cover # In DEBUG mode, add support for django-querycount # Ref: https://github.com/bradmontgomery/django-querycount -if DEBUG and get_boolean_setting( # pragma: no cover - 'INVENTREE_DEBUG_QUERYCOUNT', 'debug_querycount', False +if ( + get_boolean_setting( # pragma: no cover + 'INVENTREE_DEBUG_QUERYCOUNT', 'debug_querycount', False + ) + and DEBUG ): MIDDLEWARE.append('querycount.middleware.QueryCountMiddleware') logger.debug('Running with debug_querycount middleware enabled') @@ -432,14 +451,14 @@ AUTHENTICATION_BACKENDS = ( # LDAP support LDAP_AUTH = get_boolean_setting('INVENTREE_LDAP_ENABLED', 'ldap.enabled', False) -if LDAP_AUTH: # pragma: no cover - import django_auth_ldap.config # type: ignore[unresolved-import] - import ldap # type: ignore[unresolved-import] +LDAP_DEBUG = ( + get_boolean_setting('INVENTREE_LDAP_DEBUG', 'ldap.debug', False) and LDAP_AUTH +) +if LDAP_AUTH: # pragma: no cover AUTHENTICATION_BACKENDS.append('django_auth_ldap.backend.LDAPBackend') # debug mode to troubleshoot configuration - LDAP_DEBUG = get_boolean_setting('INVENTREE_LDAP_DEBUG', 'ldap.debug', False) if LDAP_DEBUG: if 'loggers' not in LOGGING: LOGGING['loggers'] = {} @@ -448,113 +467,10 @@ if LDAP_AUTH: # pragma: no cover 'handlers': DEFAULT_LOG_HANDLER, } - # get global options from dict and use ldap.OPT_* as keys and values - global_options_dict = get_setting( - 'INVENTREE_LDAP_GLOBAL_OPTIONS', - 'ldap.global_options', - default_value=None, - typecast=dict, - ) - global_options = {} - for k, v in global_options_dict.items(): - # keys are always ldap.OPT_* constants - k_attr = getattr(ldap, k, None) - if not k.startswith('OPT_') or k_attr is None: - print(f"[LDAP] ldap.global_options, key '{k}' not found, skipping...") - continue + # Determine LDAP settings + ldap_settings = ldap.get_ldap_config(debug=LDAP_DEBUG) + globals().update(ldap_settings) - # values can also be other strings, e.g. paths - v_attr = v - if v.startswith('OPT_'): - v_attr = getattr(ldap, v, None) - - if v_attr is None: - print(f"[LDAP] ldap.global_options, value key '{v}' not found, skipping...") - continue - - global_options[k_attr] = v_attr - AUTH_LDAP_GLOBAL_OPTIONS = global_options - if LDAP_DEBUG: - print('[LDAP] ldap.global_options =', global_options) - - AUTH_LDAP_SERVER_URI = get_setting('INVENTREE_LDAP_SERVER_URI', 'ldap.server_uri') - AUTH_LDAP_START_TLS = get_boolean_setting( - 'INVENTREE_LDAP_START_TLS', 'ldap.start_tls', False - ) - AUTH_LDAP_BIND_DN = get_setting('INVENTREE_LDAP_BIND_DN', 'ldap.bind_dn') - AUTH_LDAP_BIND_PASSWORD = get_setting( - 'INVENTREE_LDAP_BIND_PASSWORD', 'ldap.bind_password' - ) - AUTH_LDAP_USER_SEARCH = django_auth_ldap.config.LDAPSearch( - get_setting('INVENTREE_LDAP_SEARCH_BASE_DN', 'ldap.search_base_dn'), - ldap.SCOPE_SUBTREE, - str( - get_setting( - 'INVENTREE_LDAP_SEARCH_FILTER_STR', - 'ldap.search_filter_str', - '(uid= %(user)s)', - ) - ), - ) - AUTH_LDAP_USER_DN_TEMPLATE = get_setting( - 'INVENTREE_LDAP_USER_DN_TEMPLATE', 'ldap.user_dn_template' - ) - AUTH_LDAP_USER_ATTR_MAP = get_setting( - 'INVENTREE_LDAP_USER_ATTR_MAP', - 'ldap.user_attr_map', - {'first_name': 'givenName', 'last_name': 'sn', 'email': 'mail'}, - dict, - ) - AUTH_LDAP_ALWAYS_UPDATE_USER = get_boolean_setting( - 'INVENTREE_LDAP_ALWAYS_UPDATE_USER', 'ldap.always_update_user', True - ) - AUTH_LDAP_CACHE_TIMEOUT = get_setting( - 'INVENTREE_LDAP_CACHE_TIMEOUT', 'ldap.cache_timeout', 3600, int - ) - - AUTH_LDAP_MIRROR_GROUPS = get_boolean_setting( - 'INVENTREE_LDAP_MIRROR_GROUPS', 'ldap.mirror_groups', False - ) - AUTH_LDAP_GROUP_OBJECT_CLASS = get_setting( - 'INVENTREE_LDAP_GROUP_OBJECT_CLASS', - 'ldap.group_object_class', - 'groupOfUniqueNames', - str, - ) - AUTH_LDAP_GROUP_SEARCH = django_auth_ldap.config.LDAPSearch( - get_setting('INVENTREE_LDAP_GROUP_SEARCH', 'ldap.group_search'), - ldap.SCOPE_SUBTREE, - f'(objectClass={AUTH_LDAP_GROUP_OBJECT_CLASS})', - ) - AUTH_LDAP_GROUP_TYPE_CLASS = get_setting( - 'INVENTREE_LDAP_GROUP_TYPE_CLASS', - 'ldap.group_type_class', - 'GroupOfUniqueNamesType', - str, - ) - AUTH_LDAP_GROUP_TYPE_CLASS_ARGS = get_setting( - 'INVENTREE_LDAP_GROUP_TYPE_CLASS_ARGS', 'ldap.group_type_class_args', [], list - ) - AUTH_LDAP_GROUP_TYPE_CLASS_KWARGS = get_setting( - 'INVENTREE_LDAP_GROUP_TYPE_CLASS_KWARGS', - 'ldap.group_type_class_kwargs', - {'name_attr': 'cn'}, - dict, - ) - AUTH_LDAP_GROUP_TYPE = getattr(django_auth_ldap.config, AUTH_LDAP_GROUP_TYPE_CLASS)( - *AUTH_LDAP_GROUP_TYPE_CLASS_ARGS, **AUTH_LDAP_GROUP_TYPE_CLASS_KWARGS - ) - AUTH_LDAP_REQUIRE_GROUP = get_setting( - 'INVENTREE_LDAP_REQUIRE_GROUP', 'ldap.require_group' - ) - AUTH_LDAP_DENY_GROUP = get_setting('INVENTREE_LDAP_DENY_GROUP', 'ldap.deny_group') - AUTH_LDAP_USER_FLAGS_BY_GROUP = get_setting( - 'INVENTREE_LDAP_USER_FLAGS_BY_GROUP', - 'ldap.user_flags_by_group', - default_value=None, - typecast=dict, - ) - AUTH_LDAP_FIND_GROUP_PERMS = True # Allow secure http developer server in debug mode if DEBUG: @@ -637,107 +553,11 @@ Configure the database backend based on the user-specified values. logger.debug('Configuring database backend:') -# Extract database configuration from the config.yaml file -db_config = CONFIG.get('database', None) if CONFIG else None +# Load database configuration from the config file and environment variables +database = db_backend.get_db_backend() +DB_ENGINE = database['ENGINE'] -if not db_config: - db_config = {} - -# Environment variables take preference over config file! - -db_keys = ['ENGINE', 'NAME', 'USER', 'PASSWORD', 'HOST', 'PORT'] - -for key in db_keys: - # First, check the environment variables - env_key = f'INVENTREE_DB_{key}' - env_var = os.environ.get(env_key, None) - - if env_var: - # Make use PORT is int - if key == 'PORT': - try: - env_var = int(env_var) - except ValueError: - logger.exception('Invalid number for %s: %s', env_key, env_var) - # Override configuration value - db_config[key] = env_var - -# Check that required database configuration options are specified -required_keys = ['ENGINE', 'NAME'] - -# Ensure all database keys are upper case -db_config = {key.upper(): value for key, value in db_config.items()} - -for key in required_keys: - if key not in db_config: # pragma: no cover - error_msg = ( - f'Missing required database configuration value `INVENTREE_DB_{key}`' - ) - logger.error(error_msg) - - print('Error: ' + error_msg) - sys.exit(-1) - -""" -Special considerations for the database 'ENGINE' setting. -It can be specified in config.yaml (or envvar) as either (for example): -- sqlite3 -- django.db.backends.sqlite3 -- django.db.backends.postgresql -""" - -DB_ENGINE = db_config['ENGINE'].lower() - -# Correct common misspelling -if DB_ENGINE == 'sqlite': - DB_ENGINE = 'sqlite3' # pragma: no cover - -if DB_ENGINE in ['sqlite3', 'postgresql', 'mysql']: - # Prepend the required python module string - DB_ENGINE = f'django.db.backends.{DB_ENGINE}' - db_config['ENGINE'] = DB_ENGINE - -db_name = db_config['NAME'] -db_host = db_config.get('HOST', "''") - -if 'sqlite' in DB_ENGINE: - db_name = str(Path(db_name).resolve()) - db_config['NAME'] = db_name - -logger.info('DB_ENGINE: %s', DB_ENGINE) -logger.info('DB_NAME: %s', db_name) -logger.info('DB_HOST: %s', db_host) - -""" -In addition to base-level database configuration, we may wish to specify specific options to the database backend -Ref: https://docs.djangoproject.com/en/3.2/ref/settings/#std:setting-OPTIONS -""" - -# 'OPTIONS' or 'options' can be specified in config.yaml -# Set useful sensible timeouts for a transactional webserver to communicate -# with its database server, that is, if the webserver is having issues -# connecting to the database server (such as a replica failover) don't sit and -# wait for possibly an hour or more, just tell the client something went wrong -# and let the client retry when they want to. -db_options = db_config.get('OPTIONS', db_config.get('options')) - -if db_options is None: - db_options = {} - -# Set database-specific options -db_backend.set_db_options(DB_ENGINE, db_options) - -# Provide OPTIONS dict back to the database configuration dict -db_config['OPTIONS'] = db_options - -# Set testing options for the database -db_config['TEST'] = {'CHARSET': 'utf8'} - -# Set collation option for mysql test database -if 'mysql' in DB_ENGINE: - db_config['TEST']['COLLATION'] = 'utf8_general_ci' # pragma: no cover - -DATABASES = {'default': db_config} +DATABASES = {'default': database} # login settings REMOTE_LOGIN = get_boolean_setting( @@ -771,123 +591,28 @@ if SENTRY_ENABLED and SENTRY_DSN and not TESTING: # pragma: no cover init_sentry(SENTRY_DSN, SENTRY_SAMPLE_RATE, inventree_tags) # OpenTelemetry tracing -TRACING_ENABLED = get_boolean_setting( - 'INVENTREE_TRACING_ENABLED', 'tracing.enabled', False +TRACING_ENABLED = ( + get_boolean_setting('INVENTREE_TRACING_ENABLED', 'tracing.enabled', False) + and not isRunningBackup() ) -TRACING_DETAILS: Optional[dict] = None -if TRACING_ENABLED and not isRunningBackup(): # pragma: no cover - from InvenTree.tracing import setup_instruments, setup_tracing - - _t_endpoint = get_setting('INVENTREE_TRACING_ENDPOINT', 'tracing.endpoint', None) - _t_headers = get_setting('INVENTREE_TRACING_HEADERS', 'tracing.headers', None, dict) - - if _t_headers is None: - _t_headers = {} - - if _t_endpoint: - logger.info('OpenTelemetry tracing enabled') - - TRACING_DETAILS = ( - TRACING_DETAILS - if TRACING_DETAILS - else { - 'endpoint': _t_endpoint, - 'headers': _t_headers, - 'resources_input': { - **{'inventree.env.' + k: v for k, v in inventree_tags.items()}, - **get_setting( - 'INVENTREE_TRACING_RESOURCES', - 'tracing.resources', - default_value=None, - typecast=dict, - ), - }, - 'console': get_boolean_setting( - 'INVENTREE_TRACING_CONSOLE', 'tracing.console', False - ), - 'auth': get_setting( - 'INVENTREE_TRACING_AUTH', - 'tracing.auth', - default_value=None, - typecast=dict, - ), - 'is_http': get_setting( - 'INVENTREE_TRACING_IS_HTTP', 'tracing.is_http', True - ), - 'append_http': get_boolean_setting( - 'INVENTREE_TRACING_APPEND_HTTP', 'tracing.append_http', True - ), - } - ) - - # Run tracing/logging instrumentation - setup_tracing(**TRACING_DETAILS) - setup_instruments(DB_ENGINE) - else: - logger.warning('OpenTelemetry tracing not enabled because endpoint is not set') - -# endregion +TRACING_DETAILS: Optional[dict] = tracing.configure_tracing( + DB_ENGINE, TRACING_ENABLED, inventree_tags +) # Cache configuration GLOBAL_CACHE_ENABLED = is_global_cache_enabled() CACHES = {'default': get_cache_config(GLOBAL_CACHE_ENABLED)} -BACKGROUND_WORKER_TIMEOUT = int( - get_setting('INVENTREE_BACKGROUND_TIMEOUT', 'background.timeout', 90) +# Background task processing with django-q +Q_CLUSTER = worker.get_worker_config( + DB_ENGINE, + global_cache=GLOBAL_CACHE_ENABLED, + sentry_dsn=SENTRY_DSN if SENTRY_ENABLED and SENTRY_DSN else None, + debug=DEBUG, ) -# Set the retry time for background workers to be slightly longer than the worker timeout, to ensure that workers have time to timeout before being retried -BACKGROUND_WORKER_RETRY = max( - int(get_setting('INVENTREE_BACKGROUND_RETRY', 'background.retry', 300)), - BACKGROUND_WORKER_TIMEOUT + 120, -) - -# Prevent running multiple background workers if global cache is disabled -# This is to prevent scheduling conflicts due to the lack of a shared cache -BACKGROUND_WORKER_COUNT = ( - int(get_setting('INVENTREE_BACKGROUND_WORKERS', 'background.workers', 4)) - if GLOBAL_CACHE_ENABLED - else 1 -) - -# If running with SQLite, limit background worker threads to 1 to prevent database locking issues -if 'sqlite' in DB_ENGINE: - BACKGROUND_WORKER_COUNT = 1 - -BACKGROUND_WORKER_ATTEMPTS = int( - get_setting('INVENTREE_BACKGROUND_MAX_ATTEMPTS', 'background.max_attempts', 5) -) - -# django-q background worker configuration -Q_CLUSTER = { - 'name': 'InvenTree', - 'label': 'Background Tasks', - 'workers': BACKGROUND_WORKER_COUNT, - 'timeout': BACKGROUND_WORKER_TIMEOUT, - 'retry': BACKGROUND_WORKER_RETRY, - 'max_attempts': BACKGROUND_WORKER_ATTEMPTS, - 'save_limit': 1000, - 'queue_limit': 50, - 'catch_up': False, - 'bulk': 10, - 'orm': 'default', - 'cache': 'default', - 'sync': False, - 'poll': 1.5, -} - -# Configure django-q sentry integration -if SENTRY_ENABLED and SENTRY_DSN: # pragma: no cover - Q_CLUSTER['error_reporter'] = {'sentry': {'dsn': SENTRY_DSN}} - -if GLOBAL_CACHE_ENABLED: # pragma: no cover - # If using external redis cache, make the cache the broker for Django Q - # as well - Q_CLUSTER['django_redis'] = 'worker' - - SILENCED_SYSTEM_CHECKS = ['templates.E003', 'templates.W003'] # Password validation @@ -961,10 +686,10 @@ INTERNAL_EMAIL_BACKEND = get_setting( ) # SMTP backend -EMAIL_HOST = get_setting('INVENTREE_EMAIL_HOST', 'email.host', '') +EMAIL_HOST = get_setting('INVENTREE_EMAIL_HOST', 'email.host') EMAIL_PORT = get_setting('INVENTREE_EMAIL_PORT', 'email.port', 25, typecast=int) -EMAIL_HOST_USER = get_setting('INVENTREE_EMAIL_USERNAME', 'email.username', '') -EMAIL_HOST_PASSWORD = get_setting('INVENTREE_EMAIL_PASSWORD', 'email.password', '') +EMAIL_HOST_USER = get_setting('INVENTREE_EMAIL_USERNAME', 'email.username') +EMAIL_HOST_PASSWORD = get_setting('INVENTREE_EMAIL_PASSWORD', 'email.password') EMAIL_USE_TLS = get_boolean_setting('INVENTREE_EMAIL_TLS', 'email.tls', False) EMAIL_USE_SSL = get_boolean_setting('INVENTREE_EMAIL_SSL', 'email.ssl', False) # Anymail @@ -1135,16 +860,14 @@ LANGUAGE_COOKIE_SAMESITE = COOKIE_MODE - Otherwise, use the value specified in the configuration file (or env var) """ COOKIE_SECURE = ( - False - if DEBUG - else ( - SESSION_COOKIE_SAMESITE == 'None' - or get_boolean_setting( - 'INVENTREE_SESSION_COOKIE_SECURE', 'cookie.secure', False - ) - ) + get_boolean_setting('INVENTREE_SESSION_COOKIE_SECURE', 'cookie.secure', False) + or SESSION_COOKIE_SAMESITE == 'None' ) +# Override COOKIE_SECURE value in DEBUG mode +if DEBUG: + COOKIE_SECURE = False + CSRF_COOKIE_SECURE = COOKIE_SECURE SESSION_COOKIE_SECURE = COOKIE_SECURE LANGUAGE_COOKIE_SECURE = COOKIE_SECURE diff --git a/src/backend/InvenTree/InvenTree/tasks.py b/src/backend/InvenTree/InvenTree/tasks.py index 973f967086..dcd1457495 100644 --- a/src/backend/InvenTree/InvenTree/tasks.py +++ b/src/backend/InvenTree/InvenTree/tasks.py @@ -29,7 +29,6 @@ from maintenance_mode.core import ( from opentelemetry import trace from common.settings import get_global_setting, set_global_setting -from InvenTree.config import get_setting from plugin import registry from .version import isInvenTreeUpToDate @@ -822,7 +821,7 @@ def check_for_migrations(force: bool = False, reload_registry: bool = True) -> b set_pending_migrations(n) # Test if auto-updates are enabled - if not force and not get_setting('INVENTREE_AUTO_UPDATE', 'auto_update'): + if not force and not settings.AUTO_UPDATE: logger.info('Auto-update is disabled - skipping migrations') return False diff --git a/src/backend/InvenTree/InvenTree/test_serializers.py b/src/backend/InvenTree/InvenTree/test_serializers.py index b6c794e33f..aeccf73d4b 100644 --- a/src/backend/InvenTree/InvenTree/test_serializers.py +++ b/src/backend/InvenTree/InvenTree/test_serializers.py @@ -8,6 +8,7 @@ from rest_framework.serializers import SerializerMethodField import InvenTree.serializers from InvenTree.mixins import ListCreateAPI, OutputOptionsMixin +from InvenTree.serializers import OptionalField from InvenTree.unit_test import InvenTreeAPITestCase from InvenTree.urls import backendpatterns @@ -25,21 +26,25 @@ class SampleSerializer( fields = ['field_a', 'field_b', 'field_c', 'field_d', 'field_e', 'id'] field_a = SerializerMethodField(method_name='sample') - field_b = InvenTree.serializers.enable_filter( - InvenTree.serializers.FilterableSerializerMethodField(method_name='sample') + field_b = OptionalField( + serializer_class=SerializerMethodField, + serializer_kwargs={'method_name': 'sample'}, ) - field_c = InvenTree.serializers.enable_filter( - InvenTree.serializers.FilterableSerializerMethodField(method_name='sample'), - True, + field_c = OptionalField( + serializer_class=SerializerMethodField, + serializer_kwargs={'method_name': 'sample'}, + default_include=True, filter_name='crazy_name', ) - field_d = InvenTree.serializers.enable_filter( - InvenTree.serializers.FilterableSerializerMethodField(method_name='sample'), - True, + field_d = OptionalField( + serializer_class=SerializerMethodField, + serializer_kwargs={'method_name': 'sample'}, + default_include=True, filter_name='crazy_name', ) - field_e = InvenTree.serializers.enable_filter( - InvenTree.serializers.FilterableSerializerMethodField(method_name='sample'), + field_e = OptionalField( + serializer_class=SerializerMethodField, + serializer_kwargs={'method_name': 'sample'}, filter_name='field_e', filter_by_query=False, ) @@ -106,110 +111,3 @@ class FilteredSerializers(InvenTreeAPITestCase): self.assertContains(response, 'field_c') self.assertContains(response, 'field_d') self.assertNotContains(response, 'field_e') - - def test_failiure_enable_filter(self): - """Test sanity check for enable_filter.""" - # Allowed usage - field_b = InvenTree.serializers.enable_filter( # noqa: F841 - InvenTree.serializers.FilterableSerializerMethodField(method_name='sample') - ) - - # Disallowed usage - with self.assertRaises(Exception) as cm: - field_a = InvenTree.serializers.enable_filter( # noqa: F841 - SerializerMethodField(method_name='sample') - ) - self.assertIn( - 'INVE-I2: `enable_filter` can only be applied to serializer fields', - str(cm.exception), - ) - - def test_failiure_FilterableSerializerMixin(self): - """Test failure case for FilteredSerializerMixin.""" - - class BadSerializer( - InvenTree.serializers.FilterableSerializerMixin, - InvenTree.serializers.InvenTreeModelSerializer, - ): - """Bad serializer for testing FilterableSerializerMixin.""" - - class Meta: - """Meta options.""" - - model = User - fields = ['field_a', 'id'] - - field_a = SerializerMethodField(method_name='sample') - - def sample(self, obj): - """Sample method field.""" - return 'sample' # pragma: no cover - - with self.assertRaises(Exception) as cm: - _ = BadSerializer() - self.assertIn( - 'INVE-I2: No filter targets found in fields, remove `PathScopedMixin`', - str(cm.exception), - ) - - # Test override - BadSerializer.no_filters = True - _ = BadSerializer() - self.assertTrue(True) # Dummy assertion to ensure we reach here - - def test_failure_OutputOptionsMixin(self): - """Test failure case for OutputOptionsMixin.""" - - class BadSerializer(InvenTree.serializers.InvenTreeModelSerializer): - """Sample serializer.""" - - class Meta: - """Meta options.""" - - model = User - fields = ['id'] - - field_a = SerializerMethodField(method_name='sample') - - # Bad implementation of OutputOptionsMixin - with self.assertRaises(Exception) as cm: - - class BadList(OutputOptionsMixin, ListCreateAPI): - """Bad list endpoint for testing OutputOptionsMixin.""" - - serializer_class = BadSerializer - queryset = User.objects.all() - permission_classes = [] - - self.assertTrue(True) - _ = BadList() # this should raise an exception - self.assertEqual( - str(cm.exception), - 'INVE-I2: `OutputOptionsMixin` can only be used with serializers that contain the `FilterableSerializerMixin` mixin', - ) - - # More creative bad implementation - with self.assertRaises(Exception) as cm: - - class BadList(OutputOptionsMixin, ListCreateAPI): - """Bad list endpoint for testing OutputOptionsMixin.""" - - queryset = User.objects.all() - permission_classes = [] - - def get_serializer(self, *args, **kwargs): - """Get serializer override.""" - self.serializer_class = BadSerializer - return super().get_serializer(*args, **kwargs) - - view = BadList() - self.assertTrue(True) - # mock some stuff to allow get_serializer to run - view.request = self.client.request() - view.format_kwarg = {} - view.get_serializer() # this should raise an exception - - self.assertEqual( - str(cm.exception), - 'INVE-I2: `OutputOptionsMixin` can only be used with serializers that contain the `FilterableSerializerMixin` mixin', - ) diff --git a/src/backend/InvenTree/InvenTree/tests.py b/src/backend/InvenTree/InvenTree/tests.py index 7a97997b42..5a303d264d 100644 --- a/src/backend/InvenTree/InvenTree/tests.py +++ b/src/backend/InvenTree/InvenTree/tests.py @@ -692,13 +692,16 @@ class TestHelpers(TestCase): self.assertFalse(helpers.isNull(s)) def testStaticUrl(self): - """Test static url helpers.""" + """Test static URL helpers.""" self.assertEqual(helpers.getStaticUrl('test.jpg'), '/static/test.jpg') self.assertEqual(helpers.getBlankImage(), '/static/img/blank_image.png') self.assertEqual( helpers.getBlankThumbnail(), '/static/img/blank_image.thumbnail.png' ) + self.assertFalse(helpers.checkStaticFile('dummy', 'dir', 'test.jpg')) + self.assertTrue(helpers.checkStaticFile('img', 'blank_image.png')) + def testMediaUrl(self): """Test getMediaUrl.""" # Str should not work diff --git a/src/backend/InvenTree/InvenTree/version.py b/src/backend/InvenTree/InvenTree/version.py index 2f77ab765b..84802dfb05 100644 --- a/src/backend/InvenTree/InvenTree/version.py +++ b/src/backend/InvenTree/InvenTree/version.py @@ -17,7 +17,7 @@ from django.conf import settings from .api_version import INVENTREE_API_TEXT, INVENTREE_API_VERSION # InvenTree software version -INVENTREE_SW_VERSION = '1.3.0 dev' +INVENTREE_SW_VERSION = '1.4.0 dev' # Minimum supported Python version MIN_PYTHON_VERSION = (3, 11) diff --git a/src/backend/InvenTree/build/serializers.py b/src/backend/InvenTree/build/serializers.py index 1e1f3c6860..724182c978 100644 --- a/src/backend/InvenTree/build/serializers.py +++ b/src/backend/InvenTree/build/serializers.py @@ -35,7 +35,7 @@ from InvenTree.serializers import ( InvenTreeDecimalField, InvenTreeModelSerializer, NotesFieldMixin, - enable_filter, + OptionalField, ) from stock.generators import generate_batch_code from stock.models import StockItem, StockLocation @@ -116,9 +116,10 @@ class BuildSerializer( status_text = serializers.CharField(source='get_status_display', read_only=True) - part_detail = enable_filter( - part_serializers.PartBriefSerializer(source='part', many=False, read_only=True), - True, + part_detail = OptionalField( + serializer_class=part_serializers.PartBriefSerializer, + serializer_kwargs={'source': 'part', 'many': False, 'read_only': True}, + default_include=True, prefetch_fields=['part', 'part__category', 'part__pricing_data'], ) @@ -132,16 +133,22 @@ class BuildSerializer( overdue = serializers.BooleanField(read_only=True, default=False) - issued_by_detail = enable_filter( - UserSerializer(source='issued_by', read_only=True), - True, + issued_by_detail = OptionalField( + serializer_class=UserSerializer, + serializer_kwargs={'source': 'issued_by', 'read_only': True}, + default_include=True, filter_name='user_detail', prefetch_fields=['issued_by'], ) - responsible_detail = enable_filter( - OwnerSerializer(source='responsible', read_only=True, allow_null=True), - True, + responsible_detail = OptionalField( + serializer_class=OwnerSerializer, + serializer_kwargs={ + 'source': 'responsible', + 'read_only': True, + 'allow_null': True, + }, + default_include=True, filter_name='user_detail', prefetch_fields=['responsible'], ) @@ -1200,31 +1207,33 @@ class BuildItemSerializer( ) # Extra (optional) detail fields - part_detail = enable_filter( - part_serializers.PartBriefSerializer( - label=_('Part'), - source='stock_item.part', - many=False, - read_only=True, - allow_null=True, - pricing=False, - ), - True, + part_detail = OptionalField( + serializer_class=part_serializers.PartBriefSerializer, + serializer_kwargs={ + 'label': _('Part'), + 'source': 'stock_item.part', + 'many': False, + 'read_only': True, + 'allow_null': True, + 'pricing': False, + }, + default_include=True, prefetch_fields=['stock_item__part'], ) - stock_item_detail = enable_filter( - StockItemSerializer( - source='stock_item', - read_only=True, - allow_null=True, - label=_('Stock Item'), - part_detail=False, - location_detail=False, - supplier_part_detail=False, - path_detail=False, - ), - True, + stock_item_detail = OptionalField( + serializer_class=StockItemSerializer, + serializer_kwargs={ + 'source': 'stock_item', + 'read_only': True, + 'allow_null': True, + 'label': _('Stock Item'), + 'part_detail': False, + 'location_detail': False, + 'supplier_part_detail': False, + 'path_detail': False, + }, + default_include=True, filter_name='stock_detail', prefetch_fields=[ 'stock_item', @@ -1234,18 +1243,19 @@ class BuildItemSerializer( ], ) - install_into_detail = enable_filter( - StockItemSerializer( - source='install_into', - read_only=True, - allow_null=True, - label=_('Install Into'), - part_detail=False, - location_detail=False, - supplier_part_detail=False, - path_detail=False, - ), - False, + install_into_detail = OptionalField( + serializer_class=StockItemSerializer, + serializer_kwargs={ + 'source': 'install_into', + 'read_only': True, + 'allow_null': True, + 'label': _('Install Into'), + 'part_detail': False, + 'location_detail': False, + 'supplier_part_detail': False, + 'path_detail': False, + }, + default_include=False, prefetch_fields=['install_into', 'install_into__part'], ) @@ -1253,26 +1263,28 @@ class BuildItemSerializer( label=_('Location'), source='stock_item.location', many=False, read_only=True ) - location_detail = enable_filter( - LocationBriefSerializer( - label=_('Location'), - source='stock_item.location', - read_only=True, - allow_null=True, - ), - True, + location_detail = OptionalField( + serializer_class=LocationBriefSerializer, + serializer_kwargs={ + 'label': _('Location'), + 'source': 'stock_item.location', + 'read_only': True, + 'allow_null': True, + }, + default_include=True, prefetch_fields=['stock_item__location'], ) - build_detail = enable_filter( - BuildSerializer( - label=_('Build'), - source='build_line.build', - many=False, - read_only=True, - allow_null=True, - ), - True, + build_detail = OptionalField( + serializer_class=BuildSerializer, + serializer_kwargs={ + 'label': _('Build'), + 'source': 'build_line.build', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=True, prefetch_fields=[ 'build_line__build', 'build_line__build__part', @@ -1283,16 +1295,17 @@ class BuildItemSerializer( ], ) - supplier_part_detail = enable_filter( - company.serializers.SupplierPartSerializer( - label=_('Supplier Part'), - source='stock_item.supplier_part', - many=False, - read_only=True, - allow_null=True, - brief=True, - ), - False, + supplier_part_detail = OptionalField( + serializer_class=company.serializers.SupplierPartSerializer, + serializer_kwargs={ + 'label': _('Supplier Part'), + 'source': 'stock_item.supplier_part', + 'many': False, + 'read_only': True, + 'allow_null': True, + 'brief': True, + }, + default_include=False, prefetch_fields=[ 'stock_item__supplier_part', 'stock_item__supplier_part__supplier', @@ -1382,11 +1395,15 @@ class BuildLineSerializer( read_only=True, ) - allocations = enable_filter( - BuildItemSerializer( - many=True, read_only=True, allow_null=True, build_detail=False - ), - True, + allocations = OptionalField( + serializer_class=BuildItemSerializer, + serializer_kwargs={ + 'many': True, + 'read_only': True, + 'allow_null': True, + 'build_detail': False, + }, + default_include=True, prefetch_fields=[ 'allocations', 'allocations__stock_item', @@ -1427,73 +1444,79 @@ class BuildLineSerializer( bom_item = serializers.PrimaryKeyRelatedField(label=_('BOM Item'), read_only=True) # Foreign key fields - bom_item_detail = enable_filter( - part_serializers.BomItemSerializer( - label=_('BOM Item'), - source='bom_item', - many=False, - read_only=True, - allow_null=True, - pricing=False, - substitutes=False, - sub_part_detail=False, - part_detail=False, - can_build=False, - ), - False, + bom_item_detail = OptionalField( + serializer_class=part_serializers.BomItemSerializer, + serializer_kwargs={ + 'label': _('BOM Item'), + 'source': 'bom_item', + 'many': False, + 'read_only': True, + 'allow_null': True, + 'pricing': False, + 'substitutes': False, + 'sub_part_detail': False, + 'part_detail': False, + 'can_build': False, + }, + default_include=False, prefetch_fields=['bom_item'], ) - assembly_detail = enable_filter( - part_serializers.PartBriefSerializer( - label=_('Assembly'), - source='bom_item.part', - many=False, - read_only=True, - allow_null=True, - pricing=False, - ), - False, + assembly_detail = OptionalField( + serializer_class=part_serializers.PartBriefSerializer, + serializer_kwargs={ + 'label': _('Assembly'), + 'source': 'bom_item.part', + 'many': False, + 'read_only': True, + 'allow_null': True, + 'pricing': False, + }, + default_include=False, prefetch_fields=['bom_item__part', 'bom_item__part__pricing_data'], ) - part_detail = enable_filter( - part_serializers.PartBriefSerializer( - label=_('Part'), - source='bom_item.sub_part', - many=False, - read_only=True, - allow_null=True, - pricing=False, - ), - False, + part_detail = OptionalField( + serializer_class=part_serializers.PartBriefSerializer, + serializer_kwargs={ + 'label': _('Part'), + 'source': 'bom_item.sub_part', + 'many': False, + 'read_only': True, + 'allow_null': True, + 'pricing': False, + }, + default_include=False, prefetch_fields=['bom_item__sub_part', 'bom_item__sub_part__pricing_data'], ) - category_detail = enable_filter( - part_serializers.CategorySerializer( - label=_('Category'), - source='bom_item.sub_part.category', - many=False, - read_only=True, - allow_null=True, - ), - False, + category_detail = OptionalField( + serializer_class=part_serializers.CategorySerializer, + serializer_kwargs={ + 'label': _('Category'), + 'source': 'bom_item.sub_part.category', + 'many': False, + 'read_only': True, + 'allow_null': True, + 'path_detail': False, + }, + default_include=False, prefetch_fields=['bom_item__sub_part__category'], ) - build_detail = enable_filter( - BuildSerializer( - label=_('Build'), - source='build', - many=False, - read_only=True, - allow_null=True, - part_detail=False, - user_detail=False, - project_code_detail=False, - ), - True, + build_detail = OptionalField( + serializer_class=BuildSerializer, + serializer_kwargs={ + 'label': _('Build'), + 'source': 'build', + 'many': False, + 'read_only': True, + 'allow_null': True, + 'part_detail': False, + 'user_detail': False, + 'project_code_detail': False, + }, + default_include=True, ) # Annotated (calculated) fields diff --git a/src/backend/InvenTree/build/test_api.py b/src/backend/InvenTree/build/test_api.py index 26fdaf201e..e63a313238 100644 --- a/src/backend/InvenTree/build/test_api.py +++ b/src/backend/InvenTree/build/test_api.py @@ -1162,18 +1162,12 @@ class BuildListTest(BuildAPITest): data = self.options(self.url, expected_code=200).data self.assertEqual(data['name'], 'Build List') - actions = data['actions']['POST'] + actions = data['actions']['GET'] - for field_name in [ - 'pk', - 'title', - 'part', - 'part_detail', - 'project_code', - 'project_code_detail', - 'quantity', - ]: + for field_name in ['pk', 'title', 'part', 'project_code', 'quantity']: + # Fields should exist in both GET and POST actions self.assertIn(field_name, actions) + self.assertIn(field_name, data['actions']['POST']) # Specific checks for certain fields for field_name in ['part', 'project_code', 'take_from']: diff --git a/src/backend/InvenTree/common/admin.py b/src/backend/InvenTree/common/admin.py index a5461b7d02..5703423afc 100644 --- a/src/backend/InvenTree/common/admin.py +++ b/src/backend/InvenTree/common/admin.py @@ -32,6 +32,24 @@ class ParameterAdmin(admin.ModelAdmin): search_fields = ('template__name', 'data', 'note') +class SelectionListEntryInlineAdmin(admin.StackedInline): + """Inline admin class for the SelectionListEntry model.""" + + model = common.models.SelectionListEntry + extra = 0 + + +@admin.register(common.models.SelectionList) +class SelectionListAdmin(admin.ModelAdmin): + """Admin interface for SelectionList objects.""" + + list_display = ('name', 'description', 'active', 'locked') + search_fields = ('name', 'description') + list_filter = ('active', 'locked') + + inlines = [SelectionListEntryInlineAdmin] + + @admin.register(common.models.Attachment) class AttachmentAdmin(admin.ModelAdmin): """Admin interface for Attachment objects.""" diff --git a/src/backend/InvenTree/common/api.py b/src/backend/InvenTree/common/api.py index 802081af3d..f4d2cd671c 100644 --- a/src/backend/InvenTree/common/api.py +++ b/src/backend/InvenTree/common/api.py @@ -20,11 +20,17 @@ import django_q.models import django_q.tasks from django_filters.rest_framework.filterset import FilterSet from djmoney.contrib.exchange.models import ExchangeBackend, Rate -from drf_spectacular.utils import OpenApiResponse, extend_schema +from drf_spectacular.utils import ( + OpenApiParameter, + OpenApiResponse, + extend_schema, + extend_schema_view, +) from error_report.models import Error from opentelemetry import trace from pint._typing import UnitLike -from rest_framework import generics, serializers +from rest_framework import serializers, viewsets +from rest_framework.decorators import action from rest_framework.exceptions import NotAcceptable, NotFound, PermissionDenied from rest_framework.permissions import IsAdminUser, IsAuthenticated from rest_framework.response import Response @@ -44,6 +50,7 @@ from generic.states.api import urlpattern as generic_states_api_urls from InvenTree.api import ( BulkCreateMixin, BulkDeleteMixin, + BulkDeleteViewsetMixin, GenericMetadataView, SimpleGenericMetadataView, meta_path, @@ -51,6 +58,11 @@ from InvenTree.api import ( from InvenTree.config import CONFIG_LOOKUPS from InvenTree.filters import ORDER_FILTER, SEARCH_ORDER_FILTER from InvenTree.helpers import inheritors, str2bool +from InvenTree.helpers_api import ( + InvenTreeApiRouter, + RetrieveDestroyModelViewSet, + RetrieveUpdateDestroyModelViewSet, +) from InvenTree.helpers_email import send_email from InvenTree.mixins import ( CreateAPI, @@ -58,7 +70,6 @@ from InvenTree.mixins import ( ListCreateAPI, OutputOptionsMixin, RetrieveAPI, - RetrieveDestroyAPI, RetrieveUpdateAPI, RetrieveUpdateDestroyAPI, ) @@ -71,6 +82,10 @@ from InvenTree.permissions import ( IsSuperuserOrSuperScope, UserSettingsPermissionsOrScope, ) +from InvenTree.serializers import EmptySerializer + +admin_router = InvenTreeApiRouter() +common_router = InvenTreeApiRouter() class CsrfExemptMixin: @@ -155,14 +170,18 @@ class WebhookView(CsrfExemptMixin, APIView): raise NotFound() -class CurrencyExchangeView(APIView): - """API endpoint for displaying currency information.""" +class CurrencyViewSet(viewsets.GenericViewSet): + """Viewset for currency exchange information.""" permission_classes = [IsAuthenticatedOrReadScope] - serializer_class = None + serializer_class = EmptySerializer - @extend_schema(responses={200: common.serializers.CurrencyExchangeSerializer}) - def get(self, request, fmt=None): + @action( + detail=False, + methods=['get'], + serializer_class=common.serializers.CurrencyExchangeSerializer, + ) + def exchange(self, request, fmt=None): """Return information on available currency conversions.""" # Extract a list of all available rates try: @@ -195,17 +214,12 @@ class CurrencyExchangeView(APIView): return Response(response) - -class CurrencyRefreshView(APIView): - """API endpoint for manually refreshing currency exchange rates. - - User must be a 'staff' user to access this endpoint - """ - - permission_classes = [IsAuthenticatedOrReadScope, IsAdminUser] - serializer_class = None - - def post(self, request, *args, **kwargs): + @action( + detail=False, + methods=['post'], + permission_classes=[IsAuthenticatedOrReadScope, IsAdminUser], + ) + def refresh(self, request, *args, **kwargs): """Performing a POST request will update currency exchange rates.""" from InvenTree.tasks import update_exchange_rates @@ -214,6 +228,9 @@ class CurrencyRefreshView(APIView): return Response({'success': 'Exchange rates updated'}) +common_router.register('currency', CurrencyViewSet, basename='api-currency') + + class SettingsList(ListAPI): """Generic ListView for settings. @@ -325,13 +342,23 @@ class UserSettingsDetail(RetrieveUpdateAPI): ) -class NotificationMessageMixin: - """Generic mixin for NotificationMessage.""" +class NotificationMessageViewSet( + BulkDeleteViewsetMixin, RetrieveUpdateDestroyModelViewSet +): + """Notifications for the current user. + + - User can only view / delete their own notification objects + """ queryset = common.models.NotificationMessage.objects.all() serializer_class = common.serializers.NotificationMessageSerializer permission_classes = [UserSettingsPermissionsOrScope] + filter_backends = SEARCH_ORDER_FILTER + ordering_fields = ['category', 'name', 'read', 'creation'] + search_fields = ['name', 'message'] + filterset_fields = ['category', 'read'] + def get_queryset(self): """Return prefetched queryset.""" queryset = ( @@ -348,20 +375,6 @@ class NotificationMessageMixin: return queryset - -class NotificationList(NotificationMessageMixin, BulkDeleteMixin, ListAPI): - """List view for all notifications of the current user.""" - - permission_classes = [IsAuthenticatedOrReadScope] - - filter_backends = SEARCH_ORDER_FILTER - - ordering_fields = ['category', 'name', 'read', 'creation'] - - search_fields = ['name', 'message'] - - filterset_fields = ['category', 'read'] - def filter_queryset(self, queryset): """Only list notifications which apply to the current user.""" try: @@ -382,18 +395,10 @@ class NotificationList(NotificationMessageMixin, BulkDeleteMixin, ListAPI): queryset = queryset.filter(user=request.user) return queryset - -class NotificationDetail(NotificationMessageMixin, RetrieveUpdateDestroyAPI): - """Detail view for an individual notification object. - - - User can only view / delete their own notification objects - """ - - -class NotificationReadAll(NotificationMessageMixin, RetrieveAPI): - """API endpoint to mark all notifications as read.""" - - def get(self, request, *args, **kwargs): + @action( + detail=False, methods=['post'], permission_classes=[IsAuthenticatedOrReadScope] + ) + def readall(self, request, *args, **kwargs): """Set all messages for the current user as read.""" try: self.queryset.filter(user=request.user, read=False).update(read=True) @@ -404,47 +409,50 @@ class NotificationReadAll(NotificationMessageMixin, RetrieveAPI): ) -class NewsFeedMixin: - """Generic mixin for NewsFeedEntry.""" +common_router.register( + 'notifications', NotificationMessageViewSet, basename='api-notifications' +) + + +class NewsFeedViewSet(BulkDeleteViewsetMixin, RetrieveUpdateDestroyModelViewSet): + """Newsfeed from the official inventree.org website.""" queryset = common.models.NewsFeedEntry.objects.all() serializer_class = common.serializers.NewsFeedEntrySerializer permission_classes = [IsAdminOrAdminScope] - -class NewsFeedEntryList(NewsFeedMixin, BulkDeleteMixin, ListAPI): - """List view for all news items.""" - filter_backends = ORDER_FILTER - ordering = '-published' - ordering_fields = ['published', 'author', 'read'] - filterset_fields = ['read'] -class NewsFeedEntryDetail(NewsFeedMixin, RetrieveUpdateDestroyAPI): - """Detail view for an individual news feed object.""" +common_router.register('news', NewsFeedViewSet, basename='api-news') -class ConfigList(ListAPI): - """List view for all accessed configurations.""" +@extend_schema_view( + retrieve=extend_schema( + parameters=[ + OpenApiParameter( + name='key', + description='Unique identifier for this configuration', + required=True, + location=OpenApiParameter.PATH, + ) + ] + ) +) +class ConfigViewSet(viewsets.ReadOnlyModelViewSet): + """All accessed/in-use configurations.""" queryset = CONFIG_LOOKUPS serializer_class = common.serializers.ConfigSerializer permission_classes = [IsSuperuserOrSuperScope] + lookup_field = 'key' # Specifically disable pagination for this view pagination_class = None - -class ConfigDetail(RetrieveAPI): - """Detail view for an individual configuration.""" - - serializer_class = common.serializers.ConfigSerializer - permission_classes = [IsSuperuserOrSuperScope] - def get_object(self): """Attempt to find a config object with the provided key.""" key = self.kwargs['key'] @@ -454,6 +462,9 @@ class ConfigDetail(RetrieveAPI): return {key: value} +admin_router.register('config', ConfigViewSet, basename='api-config') + + class NotesImageList(ListCreateAPI): """List view for all notes images.""" @@ -493,7 +504,7 @@ class ProjectCodeDetail(RetrieveUpdateDestroyAPI): permission_classes = [IsStaffOrReadOnlyScope] -class CustomUnitList(DataExportViewMixin, ListCreateAPI): +class CustomUnitViewset(DataExportViewMixin, viewsets.ModelViewSet): """List view for custom units.""" queryset = common.models.CustomUnit.objects.all() @@ -501,22 +512,12 @@ class CustomUnitList(DataExportViewMixin, ListCreateAPI): permission_classes = [IsStaffOrReadOnlyScope] filter_backends = SEARCH_ORDER_FILTER - -class CustomUnitDetail(RetrieveUpdateDestroyAPI): - """Detail view for a particular custom unit.""" - - queryset = common.models.CustomUnit.objects.all() - serializer_class = common.serializers.CustomUnitSerializer - permission_classes = [IsStaffOrReadOnlyScope] - - -class AllUnitList(RetrieveAPI): - """List of all defined units.""" - - serializer_class = common.serializers.AllUnitListResponseSerializer - permission_classes = [IsStaffOrReadOnlyScope] - - def get(self, request, *args, **kwargs): + @action( + detail=False, + methods=['get'], + serializer_class=common.serializers.AllUnitListResponseSerializer, + ) + def all(self, request, *args, **kwargs): """Return a list of all available units.""" reg = InvenTree.conversion.get_unit_registry() all_units = {k: self.get_unit(reg, k) for k in reg} @@ -540,7 +541,10 @@ class AllUnitList(RetrieveAPI): } -class ErrorMessageList(BulkDeleteMixin, ListAPI): +common_router.register('units', CustomUnitViewset, basename='api-custom-unit') + + +class ErrorMessageViewSet(BulkDeleteViewsetMixin, RetrieveUpdateDestroyModelViewSet): """List view for server error messages.""" queryset = Error.objects.all() @@ -556,12 +560,7 @@ class ErrorMessageList(BulkDeleteMixin, ListAPI): search_fields = ['info', 'data'] -class ErrorMessageDetail(RetrieveUpdateDestroyAPI): - """Detail view for a single error message.""" - - queryset = Error.objects.all() - serializer_class = common.serializers.ErrorMessageSerializer - permission_classes = [IsAuthenticatedOrReadScope, IsAdminUser] +common_router.register('error-report', ErrorMessageViewSet, basename='api-error') class BackgroundTaskDetail(APIView): @@ -1166,18 +1165,30 @@ class EntryMixin: class SelectionEntryList(EntryMixin, ListCreateAPI): """List view for SelectionEntry objects.""" + filter_backends = SEARCH_ORDER_FILTER + + ordering_fields = ['list', 'label', 'active'] + + search_fields = ['label', 'description'] + + filterset_fields = ['active', 'value', 'list'] + class SelectionEntryDetail(EntryMixin, RetrieveUpdateDestroyAPI): """Detail view for a SelectionEntry object.""" -class DataOutputEndpointMixin: +class DataOutputViewSet(BulkDeleteViewsetMixin, RetrieveDestroyModelViewSet): """Mixin class for DataOutput endpoints.""" queryset = common.models.DataOutput.objects.all() serializer_class = common.serializers.DataOutputSerializer permission_classes = [IsAuthenticatedOrReadScope] + filter_backends = SEARCH_ORDER_FILTER + ordering_fields = ['pk', 'user', 'plugin', 'output_type', 'created'] + filterset_fields = ['user'] + def get_queryset(self): """Return the set of DataOutput objects which the user has permission to view.""" queryset = super().get_queryset() @@ -1195,29 +1206,16 @@ class DataOutputEndpointMixin: return queryset.filter(user=user) -class DataOutputList(DataOutputEndpointMixin, BulkDeleteMixin, ListAPI): - """List view for DataOutput objects.""" - - filter_backends = SEARCH_ORDER_FILTER - ordering_fields = ['pk', 'user', 'plugin', 'output_type', 'created'] - filterset_fields = ['user'] +common_router.register('data-output', DataOutputViewSet, basename='api-data-output') -class DataOutputDetail(DataOutputEndpointMixin, generics.DestroyAPIView, RetrieveAPI): - """Detail view for a DataOutput object.""" - - -class EmailMessageMixin: - """Mixin class for Email endpoints.""" +class EmailViewSet(BulkDeleteViewsetMixin, RetrieveDestroyModelViewSet): + """Backend E-Mail management for administrative purposes.""" queryset = common.models.EmailMessage.objects.all() serializer_class = common.serializers.EmailMessageSerializer permission_classes = [IsSuperuserOrSuperScope] - -class EmailMessageList(EmailMessageMixin, BulkDeleteMixin, ListAPI): - """List view for email objects.""" - filter_backends = SEARCH_ORDER_FILTER ordering_fields = [ 'created', @@ -1237,19 +1235,16 @@ class EmailMessageList(EmailMessageMixin, BulkDeleteMixin, ListAPI): 'thread_id_key', ] - -class EmailMessageDetail(EmailMessageMixin, RetrieveDestroyAPI): - """Detail view for an email object.""" - - -class TestEmail(CreateAPI): - """Send a test email.""" - - serializer_class = common.serializers.TestEmailSerializer - permission_classes = [IsSuperuserOrSuperScope] - - def perform_create(self, serializer): + @action( + detail=False, + methods=['post'], + serializer_class=common.serializers.TestEmailSerializer, + ) + def test(self, request): """Send a test email.""" + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + data = serializer.validated_data delivered, reason = send_email( @@ -1261,6 +1256,10 @@ class TestEmail(CreateAPI): raise serializers.ValidationError( detail=f'Failed to send test email: "{reason}"' ) # pragma: no cover + return Response(serializer.data) + + +admin_router.register('email', EmailViewSet, basename='api-email') class HealthCheckStatusSerializer(serializers.Serializer): @@ -1483,13 +1482,6 @@ common_api_urls = [ path('', ParameterList.as_view(), name='api-parameter-list'), ]), ), - path( - 'error-report/', - include([ - path('/', ErrorMessageDetail.as_view(), name='api-error-detail'), - path('', ErrorMessageList.as_view(), name='api-error-list'), - ]), - ), # Metadata path( 'metadata/', @@ -1522,72 +1514,6 @@ common_api_urls = [ path('', ProjectCodeList.as_view(), name='api-project-code-list'), ]), ), - # Custom physical units - path( - 'units/', - include([ - path( - '/', - include([ - path('', CustomUnitDetail.as_view(), name='api-custom-unit-detail') - ]), - ), - path('all/', AllUnitList.as_view(), name='api-all-unit-list'), - path('', CustomUnitList.as_view(), name='api-custom-unit-list'), - ]), - ), - # Currencies - path( - 'currency/', - include([ - path( - 'exchange/', - CurrencyExchangeView.as_view(), - name='api-currency-exchange', - ), - path( - 'refresh/', CurrencyRefreshView.as_view(), name='api-currency-refresh' - ), - ]), - ), - # Notifications - path( - 'notifications/', - include([ - # Individual purchase order detail URLs - path( - '/', - include([ - path( - '', - NotificationDetail.as_view(), - name='api-notifications-detail', - ) - ]), - ), - # Read all - path( - 'readall/', - NotificationReadAll.as_view(), - name='api-notifications-readall', - ), - # Notification messages list - path('', NotificationList.as_view(), name='api-notifications-list'), - ]), - ), - # News - path( - 'news/', - include([ - path( - '/', - include([ - path('', NewsFeedEntryDetail.as_view(), name='api-news-detail') - ]), - ), - path('', NewsFeedEntryList.as_view(), name='api-news-list'), - ]), - ), # Flags path( 'flags/', @@ -1617,16 +1543,6 @@ common_api_urls = [ path('icons/', IconList.as_view(), name='api-icon-list'), # Selection lists path('selection/', include(selection_urls)), - # Data output - path( - 'data-output/', - include([ - path( - '/', DataOutputDetail.as_view(), name='api-data-output-detail' - ), - path('', DataOutputList.as_view(), name='api-data-output-list'), - ]), - ), # System APIs (related to basic system functions) path( 'system/', @@ -1647,19 +1563,8 @@ common_api_urls = [ ) ]), ), + # Router + path('', include(common_router.urls)), ] -admin_api_urls = [ - # Admin - path('config/', ConfigList.as_view(), name='api-config-list'), - path('config//', ConfigDetail.as_view(), name='api-config-detail'), - # Email - path( - 'email/', - include([ - path('test/', TestEmail.as_view(), name='api-email-test'), - path('/', EmailMessageDetail.as_view(), name='api-email-detail'), - path('', EmailMessageList.as_view(), name='api-email-list'), - ]), - ), -] +admin_api_urls = admin_router.urls diff --git a/src/backend/InvenTree/common/filters.py b/src/backend/InvenTree/common/filters.py index 35b59908ed..c3cff3677d 100644 --- a/src/backend/InvenTree/common/filters.py +++ b/src/backend/InvenTree/common/filters.py @@ -19,6 +19,9 @@ from django.db.models import ( from django.db.models.query import QuerySet from django.utils.translation import gettext_lazy as _ +from rest_framework import serializers +from taggit.serializers import TagListSerializerField + import InvenTree.conversion import InvenTree.helpers import InvenTree.serializers @@ -325,11 +328,15 @@ def enable_project_code_filter(default: bool = True): """ from common.serializers import ProjectCodeSerializer - return InvenTree.serializers.enable_filter( - ProjectCodeSerializer( - source='project_code', many=False, read_only=True, allow_null=True - ), - default, + return InvenTree.serializers.OptionalField( + serializer_class=ProjectCodeSerializer, + serializer_kwargs={ + 'source': 'project_code', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=default, filter_name='project_code_detail', prefetch_fields=['project_code'], ) @@ -344,14 +351,15 @@ def enable_project_label_filter(default: bool = True): If applied, this field will automatically prefetch the 'project_code' relationship. """ - return InvenTree.serializers.enable_filter( - InvenTree.serializers.FilterableCharField( - source='project_code.code', - read_only=True, - label=_('Project Code Label'), - allow_null=True, - ), - default, + return InvenTree.serializers.OptionalField( + serializer_class=serializers.CharField, + serializer_kwargs={ + 'source': 'project_code.code', + 'read_only': True, + 'label': _('Project Code Label'), + 'allow_null': True, + }, + default_include=default, filter_name='project_code_detail', prefetch_fields=['project_code'], ) @@ -369,9 +377,15 @@ def enable_parameters_filter(): """ from common.serializers import ParameterSerializer - return InvenTree.serializers.enable_filter( - ParameterSerializer(many=True, read_only=True, allow_null=True), - False, + return InvenTree.serializers.OptionalField( + serializer_class=ParameterSerializer, + serializer_kwargs={ + 'many': True, + 'read_only': True, + 'allow_null': True, + 'required': False, + }, + default_include=False, filter_name='parameters', prefetch_fields=[ 'parameters_list', @@ -390,11 +404,10 @@ def enable_tags_filter(default: bool = False): If applied, this field will automatically prefetch the 'tags' relationship. """ - from InvenTree.serializers import FilterableTagListField - - return InvenTree.serializers.enable_filter( - FilterableTagListField(required=False), - default, + return InvenTree.serializers.OptionalField( + serializer_class=TagListSerializerField, + serializer_kwargs={'required': False}, + default_include=default, filter_name='tags', prefetch_fields=['tags', 'tagged_items', 'tagged_items__tag'], ) diff --git a/src/backend/InvenTree/common/models.py b/src/backend/InvenTree/common/models.py index 7829180460..2cb7e33104 100644 --- a/src/backend/InvenTree/common/models.py +++ b/src/backend/InvenTree/common/models.py @@ -2320,11 +2320,39 @@ class SelectionList(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeMo """Return the API URL associated with the SelectionList model.""" return reverse('api-selectionlist-list') - def get_choices(self): - """Return the choices for the selection list.""" - choices = self.entries.filter(active=True) + def get_choices(self, active: Optional[bool] = True): + """Return the choices for the selection list. + + Arguments: + active: If specified, filter choices by active status + + Returns: + List of choice values for this selection list + """ + choices = self.entries.all() + + if active is not None: + choices = choices.filter(active=active) + return [c.value for c in choices] + def has_choice(self, value: str, active: Optional[bool] = None): + """Check if the selection list has a particular choice. + + Arguments: + value: The value to check for + active: If specified, filter choices by active status + + Returns: + True if the choice exists in the selection list, False otherwise + """ + choices = self.entries.all() + + if active is not None: + choices = choices.filter(active=active) + + return choices.filter(value=value).exists() + class SelectionListEntry(models.Model): """Class which represents a single entry in a SelectionList. diff --git a/src/backend/InvenTree/common/serializers.py b/src/backend/InvenTree/common/serializers.py index 574c45f265..f8041a0a82 100644 --- a/src/backend/InvenTree/common/serializers.py +++ b/src/backend/InvenTree/common/serializers.py @@ -28,7 +28,7 @@ from InvenTree.serializers import ( InvenTreeAttachmentSerializerField, InvenTreeImageSerializerField, InvenTreeModelSerializer, - enable_filter, + OptionalField, ) from plugin import registry as plugin_registry from users.serializers import OwnerSerializer, UserSerializer @@ -381,7 +381,16 @@ class ConfigSerializer(serializers.Serializer): """Return the configuration data as a dictionary.""" if not isinstance(instance, str): instance = list(instance.keys())[0] - return {'key': instance, **self.instance.get(instance)} + + data = {'key': instance} + + for k, v in self.instance.get(instance, {}).items(): + if k == 'default_value': + # Skip sensitive default values + continue + data[k] = v + + return data class NotesImageSerializer(InvenTreeModelSerializer): @@ -857,6 +866,7 @@ class ParameterSerializer( 'note', 'updated', 'updated_by', + # Optional fields 'template_detail', 'updated_by_detail', ] @@ -906,17 +916,22 @@ class ParameterSerializer( allow_null=False, ) - updated_by_detail = enable_filter( - UserSerializer( - source='updated_by', read_only=True, allow_null=True, many=False - ), - True, + updated_by_detail = OptionalField( + serializer_class=UserSerializer, + serializer_kwargs={ + 'source': 'updated_by', + 'read_only': True, + 'allow_null': True, + 'many': False, + }, + default_include=True, prefetch_fields=['updated_by'], ) - template_detail = enable_filter( - ParameterTemplateSerializer(source='template', read_only=True, many=False), - True, + template_detail = OptionalField( + serializer_class=ParameterTemplateSerializer, + serializer_kwargs={'source': 'template', 'read_only': True, 'many': False}, + default_include=True, prefetch_fields=['template', 'template__model_type'], ) diff --git a/src/backend/InvenTree/common/setting/system.py b/src/backend/InvenTree/common/setting/system.py index 00fb35a558..bfab416a80 100644 --- a/src/backend/InvenTree/common/setting/system.py +++ b/src/backend/InvenTree/common/setting/system.py @@ -49,7 +49,8 @@ def validate_part_name_format(value): }) # Attempt to render the template with a dummy Part instance - p = Part(name='test part', description='some test part') + # Use pk=1 to ensure conditional checks like {% if part.pk %} are evaluated + p = Part(pk=1, name='test part', description='some test part') try: SandboxedEnvironment().from_string(value).render({'part': p}) @@ -234,6 +235,18 @@ SYSTEM_SETTINGS: dict[str, InvenTreeSettingsKeyType] = { 'validator': bool, 'default': False, }, + 'INVENTREE_SHOW_SUPERUSER_BANNER': { + 'name': _('Show superuser banner'), + 'description': _('Show a warning banner in the UI when logged in as superuser'), + 'validator': bool, + 'default': True, + }, + 'INVENTREE_SHOW_ADMIN_BANNER': { + 'name': _('Show admin banner'), + 'description': _('Show a warning banner in the UI when logged in as admin'), + 'validator': bool, + 'default': False, + }, 'INVENTREE_COMPANY_NAME': { 'name': _('Company name'), 'description': _('Internal company name'), diff --git a/src/backend/InvenTree/common/settings.py b/src/backend/InvenTree/common/settings.py index 687d3fecf7..0bccd1b1ec 100644 --- a/src/backend/InvenTree/common/settings.py +++ b/src/backend/InvenTree/common/settings.py @@ -28,6 +28,7 @@ def global_setting_overrides() -> dict: def get_global_setting(key, backup_value=None, environment_key=None, **kwargs): """Return the value of a global setting using the provided key.""" + import InvenTree.ready from common.models import InvenTreeSetting if environment_key: @@ -38,6 +39,10 @@ def get_global_setting(key, backup_value=None, environment_key=None, **kwargs): if backup_value is not None: kwargs['backup_value'] = backup_value + # Prevent database writes if we are in a read-only command + if InvenTree.ready.isReadOnlyCommand(): + kwargs['create'] = False + return InvenTreeSetting.get_setting(key, **kwargs) diff --git a/src/backend/InvenTree/common/test_emails.py b/src/backend/InvenTree/common/test_emails.py index 355167d2c5..0ba8b24b9f 100644 --- a/src/backend/InvenTree/common/test_emails.py +++ b/src/backend/InvenTree/common/test_emails.py @@ -103,7 +103,9 @@ class EmailTests(InvenTreeAPITestCase): ) def test_email_api(self): """Test that the email api endpoints work.""" - self.post(reverse('api-email-test'), {'email': 'test@example.org'}) + self.post( + reverse('api-email-test'), {'email': 'test@example.org'}, expected_code=200 + ) response = self.get(reverse('api-email-list'), expected_code=200) self.assertIn('subject', response.data[0]) diff --git a/src/backend/InvenTree/common/tests.py b/src/backend/InvenTree/common/tests.py index a0e5bb198f..21a9474328 100644 --- a/src/backend/InvenTree/common/tests.py +++ b/src/backend/InvenTree/common/tests.py @@ -1304,12 +1304,41 @@ class NotificationTest(InvenTreeAPITestCase): self.assertEqual( response.data['description'], - 'List view for all notifications of the current user.', + 'Notifications for the current user.\n\n- User can only view / delete their own notification objects', ) # POST action should fail (not allowed) response = self.post(url, {}, expected_code=405) + def test_api_read(self): + """Test that NotificationMessage can be marked as read.""" + # Create a notification message + NotificationMessage.objects.create( + user=self.user, + category='test', + message='This is a test notification', + target_object=self.user, + ) + user2 = get_user_model().objects.get(pk=2) + NotificationMessage.objects.create( + user=user2, + category='test', + message='This is a second test notification', + target_object=user2, + ) + + url = reverse('api-notifications-list') + self.assertEqual(NotificationMessage.objects.filter(read=True).count(), 0) + self.assertEqual(len(self.get(url, expected_code=200).data), 1) + + # Read with readall endpoint + self.post(reverse('api-notifications-readall'), {}, expected_code=200) + + self.assertEqual(NotificationMessage.objects.filter(read=True).count(), 1) + self.assertEqual(len(self.get(url, expected_code=200).data), 1) + # filtered by read status should be 0 + self.assertEqual(len(self.get(url, {'read': False}, expected_code=200).data), 0) + def test_bulk_delete(self): """Tests for bulk deletion of user notifications.""" from error_report.models import Error @@ -1835,7 +1864,7 @@ class CustomUnitAPITest(InvenTreeAPITestCase): def test_api(self): """Test the CustomUnit API.""" - response = self.get(reverse('api-all-unit-list')) + response = self.get(reverse('api-custom-unit-all')) self.assertIn('default_system', response.data) self.assertIn('available_systems', response.data) self.assertIn('available_units', response.data) diff --git a/src/backend/InvenTree/company/api.py b/src/backend/InvenTree/company/api.py index 9ce3eaf27c..3702c0c71e 100644 --- a/src/backend/InvenTree/company/api.py +++ b/src/backend/InvenTree/company/api.py @@ -179,11 +179,13 @@ class ManufacturerPartMixin(SerializerContextMixin): queryset = super().get_queryset(*args, **kwargs) queryset = queryset.prefetch_related('supplier_parts') + queryset = queryset.prefetch_related('part', 'part__pricing_data') return queryset class ManufacturerPartList( + DataExportViewMixin, ManufacturerPartMixin, SerializerContextMixin, OutputOptionsMixin, diff --git a/src/backend/InvenTree/company/serializers.py b/src/backend/InvenTree/company/serializers.py index eae59f1980..616941eda5 100644 --- a/src/backend/InvenTree/company/serializers.py +++ b/src/backend/InvenTree/company/serializers.py @@ -17,7 +17,6 @@ from importer.registry import register_importer from InvenTree.mixins import DataImportExportSerializerMixin from InvenTree.ready import isGeneratingSchema from InvenTree.serializers import ( - FilterableCharField, FilterableSerializerMixin, InvenTreeCurrencySerializer, InvenTreeDecimalField, @@ -26,8 +25,8 @@ from InvenTree.serializers import ( InvenTreeMoneySerializer, InvenTreeTagModelSerializer, NotesFieldMixin, + OptionalField, RemoteImageMixin, - enable_filter, ) from .models import ( @@ -164,9 +163,10 @@ class CompanySerializer( return queryset - primary_address = enable_filter( - AddressBriefSerializer(read_only=True, allow_null=True), - False, + primary_address = OptionalField( + serializer_class=AddressBriefSerializer, + serializer_kwargs={'read_only': True, 'many': False, 'allow_null': True}, + default_include=False, filter_name='address_detail', prefetch_fields=[ Prefetch( @@ -263,27 +263,37 @@ class ManufacturerPartSerializer( parameters = common.filters.enable_parameters_filter() - part_detail = enable_filter( - part_serializers.PartBriefSerializer( - source='part', many=False, read_only=True, allow_null=True - ), - True, - prefetch_fields=['part', 'part__pricing_data', 'part__category'], + part_detail = OptionalField( + serializer_class=part_serializers.PartBriefSerializer, + serializer_kwargs={ + 'source': 'part', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=True, + prefetch_fields=['part__category'], ) - pretty_name = enable_filter( - FilterableCharField(read_only=True, allow_null=True), filter_name='pretty' + pretty_name = OptionalField( + serializer_class=serializers.CharField, + serializer_kwargs={'read_only': True, 'allow_null': True}, + filter_name='pretty', ) manufacturer = serializers.PrimaryKeyRelatedField( queryset=Company.objects.filter(is_manufacturer=True) ) - manufacturer_detail = enable_filter( - CompanyBriefSerializer( - source='manufacturer', many=False, read_only=True, allow_null=True - ), - True, + manufacturer_detail = OptionalField( + serializer_class=CompanyBriefSerializer, + serializer_kwargs={ + 'source': 'manufacturer', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=True, prefetch_fields=['manufacturer'], ) @@ -415,70 +425,86 @@ class SupplierPartSerializer( pack_quantity_native = serializers.FloatField(read_only=True) - price_breaks = enable_filter( - SupplierPriceBreakBriefSerializer( - source='pricebreaks', - many=True, - read_only=True, - allow_null=True, - label=_('Price Breaks'), - ), - False, + price_breaks = OptionalField( + serializer_class=SupplierPriceBreakBriefSerializer, + serializer_kwargs={ + 'source': 'pricebreaks', + 'many': True, + 'read_only': True, + 'allow_null': True, + 'label': _('Price Breaks'), + }, + default_include=False, filter_name='price_breaks', prefetch_fields=['pricebreaks'], ) parameters = common.filters.enable_parameters_filter() - part_detail = enable_filter( - part_serializers.PartBriefSerializer( - label=_('Part'), source='part', many=False, read_only=True, allow_null=True - ), - False, + part_detail = OptionalField( + serializer_class=part_serializers.PartBriefSerializer, + serializer_kwargs={ + 'label': _('Part'), + 'source': 'part', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=False, prefetch_fields=['part', 'part__pricing_data'], ) - supplier_detail = enable_filter( - CompanyBriefSerializer( - label=_('Supplier'), - source='supplier', - many=False, - read_only=True, - allow_null=True, - ), - False, + supplier_detail = OptionalField( + serializer_class=CompanyBriefSerializer, + serializer_kwargs={ + 'label': _('Supplier'), + 'source': 'supplier', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=False, prefetch_fields=['supplier'], ) - manufacturer_detail = enable_filter( - CompanyBriefSerializer( - label=_('Manufacturer'), - source='manufacturer_part.manufacturer', - many=False, - read_only=True, - allow_null=True, - ), - False, + manufacturer_detail = OptionalField( + serializer_class=CompanyBriefSerializer, + serializer_kwargs={ + 'label': _('Manufacturer'), + 'source': 'manufacturer_part.manufacturer', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=False, prefetch_fields=['manufacturer_part__manufacturer'], ) - pretty_name = enable_filter( - FilterableCharField(read_only=True, allow_null=True), filter_name='pretty' + pretty_name = OptionalField( + serializer_class=serializers.CharField, + serializer_kwargs={ + 'read_only': True, + 'allow_null': True, + 'label': _('Pretty Name'), + }, + default_include=False, + filter_name='pretty', ) supplier = serializers.PrimaryKeyRelatedField( label=_('Supplier'), queryset=Company.objects.filter(is_supplier=True) ) - manufacturer_part_detail = enable_filter( - ManufacturerPartSerializer( - label=_('Manufacturer Part'), - source='manufacturer_part', - part_detail=False, - read_only=True, - allow_null=True, - ), - False, + manufacturer_part_detail = OptionalField( + serializer_class=ManufacturerPartSerializer, + serializer_kwargs={ + 'label': _('Manufacturer Part'), + 'source': 'manufacturer_part', + 'part_detail': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=False, prefetch_fields=['manufacturer_part'], ) @@ -568,18 +594,27 @@ class SupplierPriceBreakSerializer( return queryset - supplier_detail = enable_filter( - CompanyBriefSerializer( - source='part.supplier', many=False, read_only=True, allow_null=True - ), - False, + supplier_detail = OptionalField( + serializer_class=CompanyBriefSerializer, + serializer_kwargs={ + 'source': 'part.supplier', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=False, prefetch_fields=['part__supplier'], ) - part_detail = enable_filter( - SupplierPartSerializer( - source='part', brief=True, many=False, read_only=True, allow_null=True - ), - False, + part_detail = OptionalField( + serializer_class=SupplierPartSerializer, + serializer_kwargs={ + 'source': 'part', + 'brief': True, + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=False, prefetch_fields=['part', 'part__part', 'part__part__pricing_data'], ) diff --git a/src/backend/InvenTree/company/test_api.py b/src/backend/InvenTree/company/test_api.py index 6df854edd6..8570991643 100644 --- a/src/backend/InvenTree/company/test_api.py +++ b/src/backend/InvenTree/company/test_api.py @@ -507,6 +507,8 @@ class ManufacturerTest(InvenTreeAPITestCase): """Tests for the ManufacturerPart detail endpoint.""" mp = ManufacturerPart.objects.first() + self.assertIsNotNone(mp) + url = reverse('api-manufacturer-part-detail', kwargs={'pk': mp.pk}) response = self.get(url) diff --git a/src/backend/InvenTree/importer/models.py b/src/backend/InvenTree/importer/models.py index 76f5d8dcc9..d1c714bffa 100644 --- a/src/backend/InvenTree/importer/models.py +++ b/src/backend/InvenTree/importer/models.py @@ -394,7 +394,14 @@ class DataImportSession(models.Model): if serializer_class := self.serializer_class: serializer = serializer_class(data={}, importing=True) - fields.update(metadata.get_serializer_info(serializer)) + serializer_fields = metadata.get_serializer_info(serializer) + + for field_name, field in serializer_fields.items(): + # Skip read-only fields + if field.get('read_only', False): + continue + + fields[field_name] = field # Cache the available fields against this instance self._available_fields = fields diff --git a/src/backend/InvenTree/importer/registry.py b/src/backend/InvenTree/importer/registry.py index 28d96d0a79..b57fe9e3ee 100644 --- a/src/backend/InvenTree/importer/registry.py +++ b/src/backend/InvenTree/importer/registry.py @@ -19,14 +19,14 @@ class DataImportSerializerRegister: 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)) + logger.debug('Invalid serializer class: %s', serializer.__name__) return if not issubclass(serializer, Serializer): - logger.debug('Invalid serializer class: %s', type(serializer)) + logger.debug('Invalid serializer class: %s', serializer.__name__) return - logger.debug('Registering serializer class for import: %s', type(serializer)) + logger.debug('Registering serializer class for import: %s', serializer.__name__) if serializer not in self.supported_serializers: self.supported_serializers.append(serializer) diff --git a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po index 8961de5064..ef255e233d 100644 --- a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -49,7 +49,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "المستخدم ليس لديه الصلاحية لعرض هذا النموذج" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "تعذّر تحويل {original} إلى {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "الكمية المقدمة غير صحيحة" @@ -104,13 +104,13 @@ msgstr "أدخل التاريخ" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "ملاحظات" @@ -123,75 +123,91 @@ msgstr "القيمة '{name}' لا تظهر في تنسيق النمط" msgid "Provided value does not match required pattern: " msgstr "القيمة المقدمة لا تتطابق مع النمط المطلوب: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "سلسلة الرقم التسلسلي فارغة" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "تكرار التسلسل" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "نطاق المجموعة {group} يتجاوز الكَمّيَّة المسموح بها ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "لم يتم العثور على أرقام متسلسلة" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "إزالة علامات HTML من هذه القيمة" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "خطأ فى الاتصال" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "" @@ -199,7 +215,7 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "البريد الإلكتروني" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "" @@ -320,51 +336,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "" @@ -545,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -653,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -671,32 +687,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -704,26 +720,26 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -845,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -875,7 +891,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" @@ -948,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -964,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1001,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1083,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1534,11 +1550,11 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "" @@ -1600,7 +1616,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "" @@ -1633,10 +1649,10 @@ msgstr "" msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1660,11 +1676,11 @@ msgstr "" msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "" @@ -1714,7 +1730,7 @@ msgstr "" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "" msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "" @@ -1797,7 +1813,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "" @@ -1998,334 +2014,334 @@ msgstr "" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "" @@ -4163,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4181,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4210,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4258,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4307,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4797,27 +4833,27 @@ msgstr "" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4919,413 +4955,421 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "" -#: order/models.py:1800 -msgid "Line item reference" +#: order/models.py:1814 +msgid "Line Number" msgstr "" -#: order/models.py:1807 -msgid "Line item notes" +#: order/models.py:1815 +msgid "Line number for this item (optional)" msgstr "" #: order/models.py:1822 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1829 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5372,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5797,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5818,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5933,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "" @@ -5966,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8583,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8696,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:240 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po index 5f07c6496c..56a1f558ca 100644 --- a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Bulgarian\n" "Language: bg_BG\n" @@ -49,7 +49,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Потребителя няма нужното разрешение, за да вижда този модел" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Преобразуването на {original} в {unit} не беше успешно" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Въведена е недопустима стойност" @@ -104,13 +104,13 @@ msgstr "Въведи дата" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Бележки" @@ -123,75 +123,91 @@ msgstr "Значението '{name}' не отговаря на шаблона" msgid "Provided value does not match required pattern: " msgstr "Въведеното значение не отговаря на задължителния шаблон: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Липсва сериен номер" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Повтарящ се сериен номер" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Не са открити серийни номера" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Премахнете HTML маркерите от тази стойност" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Грешка при съединението" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Сървърът отговари с невалиден статусен код" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Възникна изключение" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Сървърът отговори с невалидна стойност за дължината на съдържанието (Content-Length)" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Размерът на изображението е твърде голям" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Сваляното на изображение превиши максималния размер" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Отдалеченият сървър върна празен отговор" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "" @@ -199,7 +215,7 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "" @@ -320,51 +336,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "Китайски (опростен)" msgid "Chinese (Traditional)" msgstr "Китайски (традиционен)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "" @@ -545,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Част" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -653,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -671,32 +687,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -704,26 +720,26 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -845,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -875,7 +891,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" @@ -948,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -964,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1001,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1083,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1534,11 +1550,11 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "" @@ -1600,7 +1616,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Потребител" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "" @@ -1633,10 +1649,10 @@ msgstr "" msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1660,11 +1676,11 @@ msgstr "" msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "" @@ -1714,7 +1730,7 @@ msgstr "" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "" msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "" @@ -1797,7 +1813,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "" @@ -1998,334 +2014,334 @@ msgstr "" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "" @@ -4163,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4181,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4210,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4258,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4307,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4797,27 +4833,27 @@ msgstr "" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4919,413 +4955,421 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "" -#: order/models.py:1800 -msgid "Line item reference" +#: order/models.py:1814 +msgid "Line Number" msgstr "" -#: order/models.py:1807 -msgid "Line item notes" +#: order/models.py:1815 +msgid "Line number for this item (optional)" msgstr "" #: order/models.py:1822 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1829 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Изпратено" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5372,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5797,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5818,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5933,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "" @@ -5966,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Цялостна наличност" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8583,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8696,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:240 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po index bcbf763a08..acf93c2bf0 100644 --- a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -23,7 +23,7 @@ msgstr "API endpoint nebyl nalezen" #: InvenTree/api.py:438 msgid "List of items must be provided for bulk operation" -msgstr "" +msgstr "Seznam položek musí být k dispozici pro hromadnou operaci" #: InvenTree/api.py:445 msgid "Items must be provided as a list" @@ -49,7 +49,7 @@ msgstr "Nebyla poskytnuta žádná data" msgid "This field must be unique." msgstr "Toto pole musí být unikátní." -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Uživatel nemá právo zobrazit tento model" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Nelze převést {original} na {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Vyplněno neplatné množství" @@ -104,13 +104,13 @@ msgstr "Zadejte datum" msgid "Invalid decimal value" msgstr "Neplaté desetinné číslo" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Poznámky" @@ -123,75 +123,91 @@ msgstr "Hodnota '{name}' neodpovídá formátu vzoru" msgid "Provided value does not match required pattern: " msgstr "Poskytnutá hodnota neodpovídá požadovanému vzoru: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Nelze serializovat více než 1000 položek najednou" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Nevyplněné výrobní číslo" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Duplicitní výrobní číslo" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Neplatná skupina: {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Rozsah skupiny {group} překračuje povolené množství ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Nenalezena žádná výrobní čísla" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Počet jedinečných sériových čísel ({n}) musí odpovídat množství ({q})" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Odstranit HTML tagy z této hodnoty" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "Data obsahují zakázaný markdown obsah" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "Neplatná URH: žádný název hostitele" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "Neplatná URL: nelze zjistit název hostitele" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "URL směřuje na soukromou nebo rezervovanou IP adresu" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "Příliš mnoho přesměrování" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Chyba spojení" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Server odpověděl s neplatným stavovým kódem" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Došlo k výjimce" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Server odpověděl s neplatnou hodnotou Content-Length" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Velikost obrázku je příliš velká" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Stahování obrázku překročilo maximální velikost" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Vzdálený server vrátil prázdnou odpověď" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Zadaná URL adresa není platný soubor obrázku" @@ -199,7 +215,7 @@ msgstr "Zadaná URL adresa není platný soubor obrázku" msgid "Log in to the app" msgstr "Přihlásit se do aplikace" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-mail" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Neplatný výběr" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Název" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Popis" msgid "Description (optional)" msgstr "Popis (volitelně)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Cesta" @@ -320,51 +336,51 @@ msgstr "Server zaznamenal chybu." msgid "Image" msgstr "Obrazek" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Musí být platné číslo" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Měna" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Vyberte měnu z dostupných možností" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Toto pole nesmí být nulové." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Neplatná hodnota" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Vzdálený obraz" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL souboru vzdáleného obrázku" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Stahování obrázků ze vzdálené URL není povoleno" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Nepodařilo se stáhnout obrázek ze vzdálené adresy URL" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "Neplatný formát typu obsahu" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "Typ obsahu nenalezen" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "Typ obsahu neodpovídá požadované třídě mixinu" @@ -520,11 +536,11 @@ msgstr "Čínština (zjednodušená)" msgid "Chinese (Traditional)" msgstr "Čínština (tradiční)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Dostupná aktualizace" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "Aktualizace pro InvenTree je k dispozici" @@ -536,7 +552,7 @@ msgstr "Neplatná fyzikální jednotka" msgid "Not a valid currency code" msgstr "Neplatný kód měny" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Stav objednávky" @@ -545,21 +561,21 @@ msgstr "Stav objednávky" msgid "Parent Build" msgstr "Nadřazená sestava" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Zahrnout varianty" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "Zahrnout varianty" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "Zahrnout varianty" msgid "Part" msgstr "Díl" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategorie" @@ -653,16 +669,16 @@ msgstr "Vyloučit strom" msgid "Build must be cancelled before it can be deleted" msgstr "Sestavení musí být zrušeno před odstraněním" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Spotřební materiál" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Volitelné" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Sestava" @@ -671,59 +687,59 @@ msgstr "Sestava" msgid "Tracked" msgstr "Sledováno" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testovatelné" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Objednávka nevyřízená" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Přiděleno" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Spotřebováno" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Dostupné" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Na objednávku" #: build/api.py:671 msgid "Build not found" -msgstr "" +msgstr "Sestava nenalezena" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Výrobní příkaz" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Lokace" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Výstup" @@ -767,8 +783,8 @@ msgstr "Cílové datum musí být po datu zahájení" msgid "Build Order Reference" msgstr "Referenční číslo výrobního příkazu" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Referenční číslo prodejní objednávky" msgid "Sales Order to which this build is allocated" msgstr "Prodejní objednávka, které je tato stavba přiřazena" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Zdrojové umístění" @@ -845,16 +861,16 @@ msgstr "Stav sestavení" msgid "Build status code" msgstr "Stavový kód sestavení" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Kód dávky" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Dávkový kód pro tento výstup sestavení" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Datum vytvoření" @@ -875,7 +891,7 @@ msgstr "Cílové datum dokončení" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Cílové datum dokončení sestavení. Sestavení bude po tomto datu v prodlení." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Datum dokončení" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Priorita tohoto výrobního příkazu" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Kód projektu" @@ -948,7 +964,7 @@ msgstr "Výrobní příkaz {build} byl dokončen" msgid "A build order has been completed" msgstr "Výrobní příkaz byl dokončen" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "U sledovatelných dílů musí být uvedena sériová čísla" @@ -964,23 +980,23 @@ msgstr "Výstup sestavení je již dokončen" msgid "Build output does not match Build Order" msgstr "Výstup neodpovídá výrobnímu příkazu" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Množství musí být vyšší než nula" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Množství nemůže být větší než výstupní množství" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "Výstup výroby neprošel všemi požadovanými testy" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Výstup sestavy {serial} neprošel všemi požadavky" @@ -1001,10 +1017,10 @@ msgstr "Řádková položka výrobního příkazu" msgid "Build object" msgstr "Vytvořit objekt" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Vytvořit objekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "Množství musí být 1 pro zřetězený sklad" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Zabrané množství ({q}) nesmí překročit dostupné skladové množství ({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "Skladová položka je nadměrně zabrána" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Skladové položky" @@ -1083,378 +1099,378 @@ msgstr "Cílová skladová položka" msgid "Build Level" msgstr "Úroveň sestavení" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Název dílu" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Vytvořit výstup" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Vytvořený výstup neodpovídá nadřazenému sestavení" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Výstupní díl se neshoduje s dílem výrobního příkazu" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Výstup sestavení je již dokončen" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Tento stavební výstup není plně přiřazen" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Zadejte množství pro výstup sestavení" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Celé množství požadované pro sledovatelné díly" -#: build/serializers.py:337 +#: build/serializers.py:344 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:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Sériová čísla" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Zadejte sériová čísla pro sestavení výstupů" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Skladové umístění pro výstup sestavy" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Automaticky zvolit sériová čísla" -#: build/serializers.py:378 +#: build/serializers.py:385 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:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Následující sériová čísla již existují nebo jsou neplatná" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Musí být uveden seznam výstupů sestavy" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Skladové umístění pro sešrotované výstupy" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Zahodit alokace" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Vyřadit všechny přidělené zásoby pro vyřazené výstupy" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Důvod vyřazení výstupu(ů) sestavy" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Umístění dokončených výstupů sestavy" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Přijmout neúplné přidělení" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Dokončit výstupy pokud zásoby nebyly plně přiděleny" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Spotřebovat přidělené zásoby" -#: build/serializers.py:691 +#: build/serializers.py:698 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:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Odstranit neúplné výstupy" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Odstranit všechny výstupy sestavy, které nebyly dokončeny" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Není povoleno" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Přijmout jako spotřebované tímto výrobním příkazem" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Uvolnit před dokončením tohoto výrobního příkazu" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Nadměrně přidělené zásoby" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Jak chcete zacházet s extra skladovými položkami přiřazenými k tomuto výrobnímu příkazu" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Některé skladové položky byly nadměrně přiděleny" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Přijmout nepřidělené" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Přijmout, že skladové položky nebyly plně přiřazeny k tomuto výrobnímu příkazu" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Požadované zásoby nebyly plně přiděleny" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Přijmout neúplné" -#: build/serializers.py:793 +#: build/serializers.py:800 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:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Požadované množství sestavy nebylo dokončeno" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "Výrobní příkaz má otevřené podpříkazy" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Výrobní příkaz musí být ve stavu produkce" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Výrobní příkaz má neúplné výstupy" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Linka sestavy" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Výstup sestavy" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Výstup sestavy musí odkazovat na stejnou sestavu" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Řádková položka sestavy" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part musí ukazovat na stejný díl jako výrobní příkaz" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Položka musí být skladem" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Dostupné množství ({q}) překročeno" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Pro přidělení sledovaných dílů musí být zadán výstup sestavy" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Výstup sestavy nelze zadat pro přidělení nesledovaných dílů" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Položky přidělení musí být poskytnuty" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Skladové místo, odkud se mají díly odebírat (ponechte prázdné, pokud chcete odebírat z libovolného místa)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Vynechat lokace" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Vyloučit skladové položky z tohoto vybraného umístění" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Zaměnitelné zásoby" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Skladové položky na více místech lze používat zaměnitelně" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Náhradní zásoby" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Povolit přidělování náhradních dílů" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Volitelné položky" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Přiřazení volitelných položek kusovníku k objednávce sestavy" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "Všechny položky" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "Nesledované položky" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "Sledované položky" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "Typ položky" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "Vyberte typ položky pro automatické přiřazení" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Reference v kusovníku" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "ID dílu kusovníku" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Název dílu kusovníku" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "Informace instalace" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Sestavení" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Díl dodavatele" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Přidělené množství" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Reference sestavení" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Název kategorie dílů" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Sledovatelné" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Zděděno" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Povolit varianty" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Položka kusovníku" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "Ve výrobě" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Naplánováno na sestavení" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Externí zásoby" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Dostupné zásoby" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Dostupné náhradní zásoby" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Dostupná varianta skladu" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "Spotřebované množství přesahuje přidělené množství" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "Nepovinné poznámky ke spotřebě zásob" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "Sestavení položky musí odkazovat na správný výrobní příkaz" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "Duplikovat přidělení položky sestavení" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "Výrobní linka musí odkazovat na správný výrobní příkaz" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "Duplikovat přiřazení výrobní linky" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "Musí být poskytnuta alespoň jedna linka nebo předmět" @@ -1478,7 +1494,7 @@ msgstr "Pozastaveno" msgid "Cancelled" msgstr "Zrušeno" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "Opožděný výrobní příkaz" msgid "Build order {bo} is now overdue" msgstr "Objednávka sestavy {bo} je nyní opožděná" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "Je odkaz" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "Je soubor" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "Uživatel nemá oprávnění k odstranění těchto příloh" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Uživatel nemá oprávnění k odstranění této přílohy" @@ -1534,11 +1550,11 @@ msgstr "Nejsou uvedeny žádné platné kódy měn" msgid "No plugin" msgstr "Žádný plugin" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Popisek kódu projektu" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Aktualizováno" @@ -1600,7 +1616,7 @@ msgstr "Klíčový text musí být jedinečný" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Uživatel" msgid "Price break quantity" msgstr "Množství cenové slevy" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Cena" @@ -1633,10 +1649,10 @@ msgstr "Koncový bod, ve kterém je tento webhook přijímán" msgid "Name for this webhook" msgstr "Název tohoto webhooku" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktivní" @@ -1660,11 +1676,11 @@ msgstr "Tajný klíč" msgid "Shared secret for HMAC" msgstr "Sdílený tajný klíč pro HMAC" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "ID zprávy" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "Unikátní identifikátor pro tuto zprávu" @@ -1714,7 +1730,7 @@ msgstr "Název" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Autor" msgid "Summary" msgstr "Souhrn" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Přečteno" @@ -1797,7 +1813,7 @@ msgstr "Chybějící soubor" msgid "Missing external link" msgstr "Chybějící externí odkaz" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "Typ modelu" @@ -1833,7 +1849,7 @@ msgstr "Velikost souboru" msgid "File size in bytes" msgstr "Velikost souboru v bytech" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Uveden neplatný typ modelu pro přílohu" @@ -1861,7 +1877,7 @@ msgstr "Logický klíč" msgid "State logical key that is equal to this custom state in business logic" msgstr "Logický klíč statusu, který je rovný tomuto vlastnímu statusu v podnikové logice" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Hodnota" @@ -1874,7 +1890,7 @@ msgstr "Číselná hodnota, která bude uložena v databázi modelů" msgid "Name of the state" msgstr "Název stavu" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Popisek" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "Název se musí lišit od názvů referenčního statusu" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "Výběrové pole" @@ -1982,7 +1998,7 @@ msgstr "Výchozí položka" msgid "Default entry for this selection list" msgstr "Výchozí položka pro tento seznam výběru" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Vytvořeno" @@ -1998,334 +2014,334 @@ msgstr "Poslední aktualizace" msgid "Date and time that the selection list was last updated" msgstr "Datum a čas poslední aktualizace výběrového seznamu" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "Položka seznamu výběrů" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "Položky seznamu výběrů" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "Seznam výběru, do kterého tato položka patří" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "Název výběrového seznamu" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "Popisek pro výběr seznamu" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "Popis vstupu výběrového seznamu" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "Je tento výběr výběrového listu aktivní?" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "Šablona parametru" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "Šablona parametru" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "Parametry zaškrtávacího pole nemohou mít jednotky" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "Parametry zaškrtávacího pole nemohou mít výběr" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "Volby musí být jedinečné" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "Název šablony parametru musí být jedinečný" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "Cílový typ modelu pro šablonu tohoto parametru" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "Název parametru" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "Jednotky" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "Fyzické jednotky pro tento parametr" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "Popis parametru" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "Zaškrtávací políčko" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "Je tento parametr zaškrtávací políčko?" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "Volby" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "Platné volby pro tento parametr (oddělené čárkami)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "Seznam výběru pro tento parametr" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Povoleno" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "Je šablona tohoto parametru povolena?" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "Parametr" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "Parametry" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "Neplatná volba pro hodnotu parametru" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Neplatný typ modelu pro daný parametr" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "ID modelu" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "ID cílového modelu pro tento parametr" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Šablona" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "Šablona parametru" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Data" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "Hodnota parametru" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Poznámka" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Volitelné pole pro poznámku" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "Sken čárového kódu" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "Data čárového kódu" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "Uživatel, který naskenoval čárový kód" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "Časová značka" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "Datum a čas skenování čárového kódu" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "Koncový bod URL, který zpracoval čárový kód" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "Kontext" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "Kontextová data pro skenov čárového kódu" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "Odpověď" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "Data z odezvy z čárového kódu" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Výsledek" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "Bylo skenování čárového kódu úspěšné?" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "Vyskytla se chyba" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: Odstranení Emailového logu je chráněno. Nastavte INVENTREE_PROTECT_EMAIL_LOG na False pro užmožnění odstranění." -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "E-mailová zpráva" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "E-mailové zprávy" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "Oznámeno" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "Odesláno" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "Selhalo" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "Doručeno" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "Potvrzeno" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "Příchozí" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "Odchozí" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "Bez odpovědi" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "Sledovat doručení" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "Sledovat přečtení" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "Sledovat kliknutí" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "Globální ID" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identifikátor pro tuto zprávu (může být poskytnut externím systémem)" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "ID vlákna" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identifikátor pro toto vlákno (může být poskytnut externím systémem)" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "Vlákno" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "Vlákno propojeno k této zprávě" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "Priorita" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "Emailové vlákno" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "Emailové vlákna" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Klíč" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "Unikátní klíč pro toto vlákno (použitý k identifikaci vlákna)" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "Unikátní identifikátor pro toto vlákno" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "Začato interně" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "Bylo toto vlákno započato interně?" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "Datum a čas kdy bylo vlákno vytvořeno" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "Datum a čas kdy bylo vlákno naposledy aktualizováno" @@ -2375,1243 +2391,1259 @@ msgstr "Indikuje zdali bylo nastavení přepsáno proměnou prostředí" msgid "Override" msgstr "Přepsat" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Je spuštěné" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Čekající úkoly" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Naplánované úlohy" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Neúspěšné úlohy" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "ID úlohy" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Unikátní ID úlohy" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Zamknout" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Čas uzamčení" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Jméno úkolu" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funkce" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Název funkce" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumenty" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Argumenty úlohy" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Argumenty klíčových slov" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Argumenty klíčových slov úlohy" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Název souboru" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Typ modelu" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Uživatel nemá oprávnění k vytváření nebo úpravám příloh pro tento model" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "Uživatel nemá práva vytvářet nebo upravovat parametry pro tento model" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Tento výběr je uzamčen" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Žádná skupina" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "Adresa URL webu je uzamčena konfigurací" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Je vyžadován restart" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Bylo změněno nastavení, které vyžaduje restart serveru" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Nevyřízené migrace" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Počet nevyřízených migrací databáze" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Aktivní varovací kódy" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "Seznam aktivních varovacích kódů" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "ID instance" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Unikátní identifikátor pro tuto InvenTree instanci" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "ID oznámení" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Oznámit ID instance pro server na server status infu (nepřihlášeno)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Název instance serveru" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Textový popisovač pro instanci serveru" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Použít název instance" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Použít název instance v liště" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Omezit zobrazování `o aplikaci`" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Zobrazovat okno `o aplikaci` pouze superuživatelům" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "Zobrazit banner superuživatele" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "Zobrazit varovný banner v uživatelském rozhraní při přihlášení jako superuživatel" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "Zobrazit banner administrátora" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "Zobrazit varovný banner v uživatelském rozhraní při přihlášení jako administrátor" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Jméno společnosti" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "Interní název společnosti" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "Základní URL" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "Základní URL pro instanci serveru" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Výchozí měna" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "Vyberte základní měnu pro cenové kalkulace" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "Podporované měny" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "Seznam podporovaných kódů měn" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "Interval aktualizace měny" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Jak často aktualizovat směnné kurzy (pro vypnutí nastavte na nulu)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "dny" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "Plugin aktualizace měny" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "Plugin pro aktualizaci měn k použití" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "Stáhnout z URL" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "Povolit stahování vzdálených obrázků a souborů z externích URL" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "Limit velikosti stahování" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "Maximální povolená velikost stahování vzdáleného obrázku" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "User-agent použitý ke stažení z adresy URL" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Povolit přepsání user-agenta používaného ke stahování obrázků a souborů z externí adresy URL (ponechte prázdné pro výchozí)" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "Přísná validace URL" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "Vyžadovat specifikaci schématu při ověřování adres URL" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "Interval kontroly aktualizací" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "Jak často kontrolovat aktualizace (nastavte na nulu pro vypnutí)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Automatické Zálohování" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "Povolit automatické zálohování databáze a mediálních souborů" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "Interval automatického zálohování" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "Zadejte počet dní mezi automatickými zálohovými událostmi" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "Interval mazání úloh" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "Výsledky úloh na pozadí budou odstraněny po zadaném počtu dní" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "Interval odstranění protokolu chyb" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "Záznamy chyb budou odstraněny po zadaném počtu dní" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "Interval pro odstranění oznámení" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "Uživatelská oznámení budou smazána po zadaném počtu dní" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "Interval mazání emailů" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "Emailové zprávy budou odstraněny po specifikovaném počtu dní" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "Chránit Email log" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "Zabránit odstranění vstupů email logů" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Podpora čárových kódů" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "Povolit podporu pro skenování čárových kódů ve webovém rozhraní" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "Ukládat výsledky čárových kódů" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "Ukládat výsledky skenování čárových kódů v databázi" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "Maximální počet naskenovaných čárových kódů" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "Maximální počet uložených výsledků skenování čárových kódů" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "Zpoždění vstupu čárového kódu" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "Doba zpoždění zpracování vstupu čárového kódu" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "Podpora webové kamery pro čárové kódy" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "Povolit skenování čárových kódů přes webovou kameru v prohlížeči" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "Zobrazovat data čárových kódů" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "Zobrazovat data čárových kódů v prohlížeči jako text" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "Plugin pro generování čárových kódů" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "Plugin na použití pro interní generaci čárových kódů" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "Revize dílu" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "Povolit pole revize pro díl" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "Revize pouze pro sestavy" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "Povolit revize pouze pro sestavy" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "Povolit odstranění ze sestavy" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "Povolit odstranění dílů, které jsou použity v sestavě" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "Regulární vzorec výrazu pro odpovídající IPN dílu" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "Povolit duplicitní IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "Povolit více dílům sdílet stejný IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "Povolit editaci IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "Povolit změnu IPN při úpravách dílu" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "Kopírovat data BOM dílu" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopírovat data BOM ve výchozím nastavení při duplikování dílu" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "Kopírovat data parametrů dílu" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "Kopírovat data parametrů ve výchozím nastavení při duplikování dílu" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "Kopírovat zkušební data dílu" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "Kopírovat testovací data ve výchozím nastavení při duplikování dílu" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "Kopírovat šablony parametrů kategorie" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "Kopírování šablon parametrů kategorie při vytváření dílu" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "Díly jsou ve výchozím nastavení šablony" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "Díly lze ve výchozím nastavení sestavit z jiných komponentů" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "Díly lze ve výchozím nastavení použít jako dílčí komponenty" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Možné zakoupit" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "Díly jsou zakoupitelné ve výchozím nastavení" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Prodejné" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "Díly jsou prodejné ve výchozím nastavení" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "Díly jsou sledovatelné ve výchozím nastavení" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Nehmotné (virtuální)" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "Díly jsou nehmotné (virtuální) ve výchozím nastavení" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "Zobrazit související díly" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "Zobrazit související díly pro díl" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "Počáteční údaje zásob" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "Povolit vytvoření počátečního skladu při přidání nové části" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "Počáteční údaje dodavatele" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Povolit vytvoření počátečních dat dodavatele při přidávání nového dílu" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "Formát zobrazení jména dílu" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "Formát pro zobrazení názvu dílu" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "Výchozí ikona kategorie dílu" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "Výchozí ikona kategorie dílu (prázdné znamená bez ikony)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "Minimální počet desetinných míst u cen" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Minimální počet desetinných míst k zobrazení u cenových údajů" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "Maximální počet desetinných míst u cen" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maximální počet desetinných míst k zobrazení u cenových údajů" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "Použít ceny dodavatele" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Zahrnout cenová zvýhodnění dodavatelů do celkových cenových kalkulací" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "Přepsání historie nákupu" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historické ceny nákupních objednávek mají přednost před cenovými zvýhodněními dodavatele" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "Použít ceny skladových položek" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Použít ceny z ručně zadaných skladových údajů pro cenové kalkulace" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "Stáří cen skladových položek" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Vyloučit skladové položky starší než tento počet dní z cenových kalkulací" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "Použít cenu varianty" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "Zahrnutí cen variant do celkových cenových kalkulací" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "Pouze aktivní varianty" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "Pro výpočet ceny varianty použijte pouze aktivní díly varianty" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "Automatická aktualizace cen" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "Automaticky aktualizovat cenu dílu když se změní interní data" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "Interval přestavby cen" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "Počet dní před automatickou aktualizací cen dílů" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Interní ceny" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "Povolit interní ceny pro díly" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "Přepis interní ceny" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "Pokud jsou k dispozici, interní ceny mají přednost před výpočty cenového rozpětí" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "Povolit nulovou hodnotu kusovníku" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "Přijmout nulové množství pro položku kusovníku. Umožňuje použít nastavení množství pro definování množství požadovaného pro sestavení, nezávisle na počtu staveb" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "Povolit tisk štítků" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "Povolit tisk štítků z webového rozhraní" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "DPI rozlišení štítků" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Rozlišení DPI při generování obrazových souborů, které se dodávají do zásuvných modulů pro tisk štítků" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Povolit reporty" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "Povolit generování reportů" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "Režim ladění chyb" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "Generovat reporty v režimu ladění (HTML výstup)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "Zaznamenávat chyby reportů" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "Zaznamenávat chyby, které se vyskytnou při vytváření reportů" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Velikost stránky" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "Výchozí velikost stránky pro PDF reporty" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "Vynutit jednotky parametru" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "Pokud jsou uvedeny jednotky, musí hodnoty parametrů odpovídat zadaným jednotkám" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "Globálně unikátní sériová čísla" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "Sériová čísla pro skladové položky musí být globálně unikátní" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "Odstranit vyčerpané zásoby" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "Určuje výchozí chování při vyčerpání zásoby položky" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "Šablona kódu dávky" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "Šablona pro generování výchozích kódů dávky pro skladové položky" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "Expirace zásob" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "Povolit funkci expirace zásob" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "Prodat prošlé zásoby" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "Povolit prodej prošlých zásob" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "Čas stáří zásob" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "Počet dnů, po které jsou skladové položky považovány za nevyužité před uplynutím doby expirace" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "Sestavit prošlé zásoby" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "Povolit sestavování s prošlými zásobami" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "Kontrola vlastnictví zásob" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "Umožnit kontrolu vlastnictví nad skladovými místy a položkami" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "Výchozí ikona umístění zásob" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "Výchozí ikona umístění zásob (prázdné znamená bez ikony)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "Zobrazit nainstalované skladové položky" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "Zobrazit nainstalované skladové položky ve skladových tabulkách" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "Zkontrolovat BOM při instalaci položek" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Nainstalované skladové položky musí existovat v BOM pro nadřazený díl" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "Povolit převod mimo sklad" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Umožnit přesun skladových položek, které nejsou na skladě, mezi skladovými místy" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "Referenční vzor objednávky sestavy" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "Požadovaný vzor pro generování referenčního pole Objednávka sestavy" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "Vyžadovat odpovědného vlastníka" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "Ke každé objednávce musí být přiřazen odpovědný vlastník" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "Vyžadovat aktivní díl" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "Zabránit vytváření výrobních příkazů pro neaktivní díly" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "Vyžadovat uzamčený díl" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "Zabránit vytváření výrobních příkazů pro odemčené díly" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "Vyžadovat schválený kusovník" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "Zabránit vytváření výrobních příkazů, dokud není schválen kusovník" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "Vyžadovat uzavření podobjednávek" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "Zabránit dokončení výrobního příkazu dokud nebudou uzavřeny všechny podpříkazy" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "Externí výrobní příkazy" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "Povolit funkcionalitu externích výrobních příkazů" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Blokovat, dokud testy neprojdou" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Zabránit dokončení výstupů sestavy, dokud neprojdou všechny požadované testy" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "Povolit vracení objednávek" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "Povolit funkci vrácení objednávky v uživatelském rozhraní" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "Referenční vzor návratové objednávky" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "Požadovaný vzor pro vygenerování referenčního pole Návratová objednávka" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "Úprava dokončených návratových objednávek" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "Umožnit úpravu návratových objednávek po jejich dokončení" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "Referenční vzor prodejní objednávky" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "Požadovaný vzor pro generování referenčního pole prodejní objednávky" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "Výchozí přeprava prodejní objednávky" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "Povolit vytvoření výchozí přepravy s prodejními objednávkami" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "Úprava dokončených prodejních objednávek" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Umožnit úpravy prodejních objednávek po jejich odeslání nebo dokončení" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "Zásilka vyžaduje kontrolu" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "Zabránit dokončení zásilek dokud nebudou zkontrolovány položky" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "Označit odeslané objednávky jako dokončené" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Prodejní objednávky označené jako odeslané se automaticky dokončí a obejdou stav „odesláno“" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "Referenční vzor nákupní objednávky" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "Požadovaný vzor pro generování referenčního pole nákupní objednávky" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "Úprava dokončených nákupních objednávek" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Umožnit úpravy nákupních objednávek po jejich odeslání nebo dokončení" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "Převést měnu" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "Převést hodnotu předmětu na základní měnu při příjmu zásob" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "Automatické dokončování nákupních objednávek" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Automaticky označit nákupní objednávky jako kompletní, jakmile jsou přijaty všechny řádkové položky" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Povolit pole zapomenutého hesla" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "Povolení funkce zapomenutého hesla na přihlašovacích stránkách" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Povolit registrace" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "Povolit samoregistraci uživatelů na přihlašovacích stránkách" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "Povolit SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "Povolit SSO na přihlašovacích stránkách" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "Povolit SSO registraci" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Povolit samoregistraci uživatelů prostřednictvím SSO na přihlašovacích stránkách" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "Povolit synchronizaci SSO skupin" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Povolit synchronizaci InvenTree skupin se skupinami poskytnutými IdP" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "klíč SSO skupiny" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Název deklarace skupinového atributu poskytnutého IdP" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "mapa SSO skupiny" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Mapování ze skupin SSO do místních InvenTree skupin. Pokud místní skupina neexistuje, bude vytvořena." -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "Odstranit skupiny mimo SSO" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Zdali mají být skupiny přiřazené uživateli odstraněny pokud nemají backend of IdP. Vypnutí tohoto nastavení můžu způsobit problémy se zabezpečením" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "Vyžadován e-mail" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "Požadovat, aby uživatel při registraci zadal e-mail" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "Automaticky vyplnit SSO uživatele" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "Automaticky vyplnit údaje o uživateli z údajů o účtu SSO" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "Mail dvakrát" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "Při registraci dvakrát požádat uživatele o zadání e-mailu" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Heslo dvakrát" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "Při registraci dvakrát požádat uživatele o heslo" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "Povolené domény" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Omezit registraci na určité domény (oddělené čárkou a začínající @)" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "Skupina při registraci" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Skupina do které jsou nový uživatelé přiřazeni při registraci. Pokud je povolena synchronizace SSO skupin, tato skupina lze přiřadit pouze pokud nezle přiřadit skupinu od IdP." -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "Vynutit MFA" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "Uživatelé musí používat vícefaktorové zabezpečení." -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "Povolení tohoto nastavení bude vyžadovat více fázové ověření u všech uživatelů. Všechny relace budou okamžitě ukončeny." -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "Zkontrolovat pluginy při spuštění" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Zkontrolujte, zda jsou při spuštění nainstalovány všechny pluginy - povolit v kontejnerových prostředích" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "Zkontrolovat aktualizace pluginů" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "Povolit pravidelné kontroly aktualizací nainstalovaných pluginů" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "Povolit integraci URL" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "Povolit plug-inům přidávat trasy URL" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "Povolit integraci navigace" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "Povolit integrování pluginů do navigace" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "Povolit integraci aplikací" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "Povolit pluginům přidávát aplikace" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "Povolit integraci plánu" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "Povolit pluginům spouštění naplánovaných úloh" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "Povolit integraci událostí" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "Povolit pluginům reagovat na interní události" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "Povolit rozhraní intergace" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "Povolit integrování pluginů do uživatelského rozhraní" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "Povolit integraci emailu" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Povolit pluginům zpracování odchozích/příchozích emailů" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "Povolit projektové kódy" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "Povolit projektové kódy pro sledování projektů" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "Povolit inventuru" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "Povolit funkcionalitu pro zaznamenávání historických stavů zásob a hodnoty" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "Vyloučit externí umístění" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Vyloučit skladové položky z externích lokací z inventury" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "Perioda automatické inventury" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "Počet dní mezi automatickým záznamem inventury" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "Odstranit staré záznamy inventur" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "Odstranit záznamy inventur starší než zadaný počet dní" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "Interval odstranění inventury" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "Záznamy inventur budou odstraněny po zadaném počtu dní" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "Odstranit staré záznamy sledování zásob" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "Odstranit staré záznamy sledování zásob starší než zadaný počet dní" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "Interval odstranění sledování zásob" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "Záznamy sledování zásob budou odstraněny po zadaném počtu dní" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "Zobrazit celá jména uživatelů" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "Zobrazit plná jména uživatelů namísto uživatelských jmen" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "Zobrazit uživatelské profily" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "Zobrazit profily uživatelů na jejich profilové stránce" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "Povolit data zkušební stanice" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "Povolit sběr dat ze zkušební stanice pro výsledky testů" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "Povolit ping stroje" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Povolit pravidelný úkol pingu registrovaných strojů pro kontrolu jejich stavu" @@ -3956,33 +3988,33 @@ msgstr "Díl je aktivní" msgid "Manufacturer is Active" msgstr "Výrobce je aktivní" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Díl dodavatele je aktivní" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "Primární díl dodavatele" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Interní díl je aktivní" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Dodavatel je aktivní" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Výrobce" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Společnost" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "Má zásoby" @@ -4071,7 +4103,7 @@ msgstr "DIČ" msgid "Company Tax ID" msgstr "DIČ společnosti" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Adresa" @@ -4163,7 +4195,7 @@ msgstr "Doručovací poznámky pro interní použití" msgid "Link to address information (external)" msgstr "Odkaz na informace o adrese (externí)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Výrobce dílu" @@ -4181,12 +4213,12 @@ msgstr "Zvolte díl" msgid "Select manufacturer" msgstr "Vyberte výrobce" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "MPN" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Číslo dílu výrobce" @@ -4210,8 +4242,8 @@ msgstr "Jednotky balení musí být větší než nula" msgid "Linked manufacturer part must reference the same base part" msgstr "Odkazovaný díl výrobce musí odkazovat na stejný základní díl" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Dodavatel" msgid "Select supplier" msgstr "Vyberte dodavatele" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Skladová evidence dodavatele" @@ -4258,8 +4290,8 @@ msgstr "základní cena" msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimální poplatek (např. poplatek za skladování)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Balení" @@ -4307,14 +4339,18 @@ msgstr "Výchozí měna používaná pro tohoto dodavatele" msgid "Company Name" msgstr "Jméno společnosti" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Skladem" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "Množstevní sleva" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "Hezké jméno" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Při exportu dat došlo k chybě" @@ -4419,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "Existující databázový identifikátor pro tento záznam" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "Sloupec je již napamován k poli databáze" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Pole je již namapováno do datového sloupce" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "Mapování sloupců musí být připojeno k platné relaci importu" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "Sloupec neexistuje v datovém souboru" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "Pole neexistuje v cílovém modelu" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Vybrané pole je pouze pro čtení" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Importovací relace" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Pole" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Sloupec" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Index řádku" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Původní data řádku" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Chyby" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Platné" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "ID je vyžadováno pro aktualizaci existujících záznamů." -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "Žádný záznam nalezen pro zadané ID" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "Poskytnut neplatný formát ID" @@ -4579,7 +4615,7 @@ msgstr "Počet kopií, které se mají tisknout pro každý štítek" msgid "Connected" msgstr "Připojeno" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Neznámý" @@ -4711,7 +4747,7 @@ msgstr "Maximální hodnota pro pokrok typu, vyžadováno pokud typ=pokrok" msgid "Order Reference" msgstr "Označení objednávky" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Vynikající" @@ -4767,11 +4803,11 @@ msgstr "Aktualizováno po" msgid "Has Pricing" msgstr "Má cenu" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Dokončeno před" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Dokončeno po" @@ -4779,17 +4815,17 @@ msgstr "Dokončeno po" msgid "External Build Order" msgstr "Externí výrobní příkaz" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "Objednávka" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Objednávka byla dokončena" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Interní díl" @@ -4797,27 +4833,27 @@ msgstr "Interní díl" msgid "Order Pending" msgstr "Objednávka čeká na vyřízení" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Dokončeno" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Má zásilku" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" -msgstr "" +msgstr "Zásilka nebyla nalezena" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Nákupní objednávka" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "Nákupní objednávka" msgid "Sales Order" msgstr "Prodejní objednávka" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "Adresa nesouhlasí s vybranou společností" msgid "Order description (optional)" msgstr "Popis objednávky (volitelné)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "Vyberte kód projektu pro tuto objednávku" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "Odkaz na externí stránku" @@ -4886,7 +4922,7 @@ msgstr "Datum zahájení" msgid "Scheduled start date for this order" msgstr "Plánované datum zahájení této objednávky" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Cílené datum" @@ -4919,413 +4955,421 @@ msgstr "Kontaktní bod pro tuto objednávku" msgid "Company address for this order" msgstr "Adresa společnosti pro tuto objednávku" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "Číslo objednávky" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Stav" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "Stav objednávky" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "Společnost, od které se položky objednávají" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "Reference dodavatele" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "Referenční kód objednávky dodavatele" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "přijal" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "Datum dokončení objednávky" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "Místo určení" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "Cílové místo pro přijaté položky" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "Dodavatel dílu se musí shodovat s dodavatelem PO" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "Řádková položka neodpovídá nákupní objednávce" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "Řádkové položce chybí propojený díl" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "Množství musí být kladné" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" -msgstr "" +msgstr "Sériová čísla nemohou být přiřazena virtuálním dílům" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Zákazník" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "Společnost, jíž se položky prodávají" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "Stav prodejní objednávky" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "Reference zákazníka " -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "Referenční kód objednávky zákazníka" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "Datum odeslání" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "odesláno společností" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "Objednávka je již dokončena" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "Objednávka je již zrušena" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "Pouze otevřená objednávka může být označena jako kompletní" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Objednávku nelze dokončit, protože dodávky jsou nekompletní" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Objednávka nemůže být dokončena, protože jsou neúplné přiřazení" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "Objednávka nemůže být dokončena, protože jsou neúplné řádkové položky" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "Objednávka je uzamčena a nelze ji upravit" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "Množství položky" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "Číslo linky" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "Číslo řádku pro tuto položku (nepovinné)" + +#: order/models.py:1822 msgid "Line item reference" msgstr "Označení řádkové položky" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "Poznámky k řádkovým položkám" -#: order/models.py:1822 +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Cílové datum pro tuto řádkovou položku (pro použití cílového data z objednávky ponechte prázdné)" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "Popis řádkové položky (nepovinné)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "Dodatečný kontext pro tento řádek" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "Cena za jednotku" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "Řádková položka nákupní objednávky" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "Dodavatelský díl musí odpovídat dodavateli" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "Objednávka sestavení musí být označená jako externí" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "Objednávka sestavení může být propojena pouze s montážními díly" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "Výrobní příkaz musí odpovídat lince předmětu dílu" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "Díl dodavatele" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "Doručeno" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "Počet přijatých položek" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Nákupní cena" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "Jednotková nákupní cena" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "Externí výrobní příkaz který má být splněn touto linkovou položkou" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "Nákupní příkaz extra linka" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "Řádková položka prodejní objednávky" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "K prodejní objednávce lze přiřadit pouze prodejné díly" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Prodejní cena" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "Jednotková prodejní cena" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Odesláno" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "Odeslané množství" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "Zásilka prodejní objednávky" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "Adresa zásilky musí odpovídat adrese zákazníka" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "Dodací adresa pro tuto zásilku" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "Datum odeslání" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "Datum doručení" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "Datum doručení zásilky" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "Kontroloval(a)" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "Uživatel, který zkontroloval tuto zásilku" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Doprava" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "Číslo zásilky" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "Sledovací číslo" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "Informace o sledování zásilky" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "Číslo faktury" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "Referenční číslo přiřazené faktury" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "Zásilka již byla odeslána" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "Zásilka nemá žádné přidělené skladové položky" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "Zásilka musí být zkontrolována než může být dokončená" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "Prodejní příkaz extra linka" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "Přidělení prodejní objednávky" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "Skladová položka nebyla přiřazena" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "Nelze přidělit skladovou položku na řádek s jiným dílem" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "Nelze přidělit skladovou položku na řádek bez dílu" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Přidělené množství nesmí překročit množství zásob" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "Zabrané množství musí být větší než nula" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Množství musí být 1 pro serializovanou skladovou položku" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "Prodejní objednávka neodpovídá zásilce" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Zásilka neodpovídá prodejní objednávce" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Řádek" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "Odkaz na zásilku z prodejní objednávky" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "Položka" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "Vyberte skladovou položku pro přidělení" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "Zadejte množství pro přidělení zásob" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "Reference návratové objednávky" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "Společnost, od které se vrací položky" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "Stav návratové objednávky" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "Linkový předmět vratky" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "Zásobní položka musí být specifikována" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "Množství vratky přesahuje množstvní zásob" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "Množstvní vratky musí být více než nula" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "Neplatné množství pro sériovou skladovou položku" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "Vyberte položku pro vrácení od zákazníka" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "Datum přijetí" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "Datum příjetí této vratky" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "Výsledek" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "Výsledky pro tuto položku" -#: order/models.py:3072 +#: order/models.py:3101 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:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "Vratka extra linka" @@ -5353,7 +5397,7 @@ msgstr "Kopírovat extra řádky" msgid "Copy extra line items from the original order" msgstr "Kopírovat extra řádkové položky z původní objednávky" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Kopírovat parametry" @@ -5372,216 +5416,216 @@ msgstr "Řádkové položky" msgid "Completed Lines" msgstr "Dokončené řádky" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Duplikovat objednávku" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Specifikujte možnosti pro duplikaci této objednávky" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "Neplatné ID objednávky" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Název dodavatele" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Objednávku nelze zrušit" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Povolit uzavření objednávky s neúplnými řádkovými položkami" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Objednávka má nedokončené řádkové položky" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Objednávka není otevřena" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Automatická cena" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Automaticky vypočítat nákupní cenu na základě údajů o dílech dodavatele" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Měna nákupní ceny" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Sloučit položky" -#: order/serializers.py:689 +#: order/serializers.py:728 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:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Číslo zboží (SKU)" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Interní číslo dílu" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Interní název dílu" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Musí být uveden díl dodavatele" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Objednávka musí být zadána" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Dodavatel musí odpovídat objednávce" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Objednávka musí odpovídat dodavateli" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Řádková položka" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Vyberte cílové umístění pro přijaté položky" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Zadat kód šarže pro příchozí skladové položky" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Datum expirace" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Zadejte datum expirace pro příchozí skladové položky" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Zadat sériová čísla pro příchozí skladové položky" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Přepsat informace o obalu pro příchozí skladové položky" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Dodatečná poznámka pro příchozí skladové položky" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Čárový kód" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Naskenovaný čárový kód" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Tento čárový kód se již používá" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Musí být uvedeny řádkové položky" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Místo určení musí být specifikováno" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Hodnoty dodaných čárových kódů musí být unikátní" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Zásilky" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Dokončené zásilky" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "Přidělené řádky" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Měna prodejní ceny" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Přidělené položky" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Nebyly poskytnuty žádné údaje o zásilce" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Řádková položka není přiřazena k této objednávce" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Množství musí být kladné" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Zadejte sériová čísla pro přidělení" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Zásilka již byla odeslána" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Zásilka není spojena s touto objednávkou" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Nebyla nalezena žádná shoda pro následující sériová čísla" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Následující sériová čísla nejsou k dispozici" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Řádkový předmět vratky" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Řádková položka neodpovídá vratce" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Řádková položka již byla přijata" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Položky lze přijímat pouze proti objednávkám, které probíhají" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Množství k vrácení" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Měna ceny řádku" @@ -5797,7 +5841,7 @@ msgstr "Výchozí klíčová slova pro díly v této kategorii" msgid "Icon" msgstr "Ikona" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikona (volitelná)" @@ -5818,7 +5862,7 @@ msgstr "Výchozí hodnota" msgid "Default Parameter Value" msgstr "Výchozí hodnota parametru" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Díly" @@ -5863,7 +5907,7 @@ msgstr "Díl nemůže být revize same sebe" #: part/models.py:783 msgid "Revision code must be specified for a part marked as a revision" -msgstr "" +msgstr "Kód revize musí být specifikován pro díl označený jako revize" #: part/models.py:791 msgid "Revisions are only allowed for assembly parts" @@ -5933,7 +5977,7 @@ msgstr "Klíčová slova dílu pro zlepšení vyhledávání" msgid "Part category" msgstr "Kategorie dílu" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Interní číslo dílu (IPN)" @@ -5942,7 +5986,7 @@ msgstr "Interní číslo dílu (IPN)" msgid "Part revision or version number" msgstr "Číslo revize nebo verze dílu" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Revize" @@ -5966,7 +6010,7 @@ msgstr "Výchozí expirace" msgid "Expiry time (in days) for stock items of this part" msgstr "Expirační čas (ve dnech) pro zásoby tohoto dílu" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimální zásoby na skladě" @@ -6447,355 +6491,355 @@ msgstr "Část vztahu nemůže být vytvořena mezi dílem samotným" msgid "Duplicate relationship already exists" msgstr "Duplicitní vztah již existuje" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Nadřazená kategorie" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Nadřazená kategorie dílu" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Podkategorie" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Výsledky" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Počet výsledků zaznamenaných podle této šablony" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Nákupní měna této skladové položky" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "Soubor není obrázek" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Původní díl" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Vyberte původní díl, který má být duplikován" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Kopírovat obrázek" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Kopírovat obrázek z původního dílu" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Kopírovat kusovník" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Kopírovat kusovník z původního dílu" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Kopírovat data parametrů z původního dílu" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Kopírovat poznámky" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Kopírovat poznámky z původního dílu" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "Kopírovat testy" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "Kopírovat testovací šablony z původního dílu" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Počáteční skladové množství" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Zadejte počáteční skladové množství pro tuto část. Pokud je množství nulové, není přidáno žádné." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Počáteční skladové místo" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Zadejte počáteční skladové místo pro tento díl" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Vyberte dodavatele (nebo nechte prázdné pro přeskočení)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Vyberte výrobce (nebo nechte prázdné pro přeskočení)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Číslo dílu výrobce" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "Vybraná společnost není platný dodavatel" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "Vybraná společnost není platný výrobce" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Výrobce dílu se stejným MPN již existuje" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Dodavatelský díl s tímto SKU již existuje" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Název kategorie" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Budova" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "Množství tohoto dílu, které je v současné době ve výrobě" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Zbývající množství tohoto dílu, které má být postaveno" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Skladové položky" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Revize" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Celkem skladem" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Nezařazené zásoby" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Skladové varianty" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Duplikovat díl" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Kopírovat počáteční data z jiného dílu" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Počáteční zásoby" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Vytvořit díl s počátečním množstvím zásob" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Informace o dodavateli" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Přidat počáteční informace dodavatele pro tento díl" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Kopírovat parametry kategorie" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Kopírovat šablony parametrů z vybrané kategorie dilu" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Stávající obrázek" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Název souboru existujícího obrázku dílu" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Obrázek neexistuje" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Schválit celý kusovník" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Lze postavit" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "Vyžadováno pro výrobní objednávku" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "Přířazeno výrobním objednávkám" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "Vyžadováno pro prodejní objednávky" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "Přiřazeno prodejním objednávkám" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "IPN dílu" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "Popis dílu" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "Vyberte díl u kterého chce vytvořit informace inventury (i pro jeho varianty)" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "Vyberte kategorii pro obsažení všech dílů v dané kategorii (a podkategoriích)" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "Vyberte lokaci pro obsažení všech dílů se zásobami na dané lokaci (včetně pod-lokací)" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "Generovat vstupy inventury" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "Uložit vstupy inventury pro vybrané díly" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "Generovat report" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "Generovat report inventury pro vybrané díly" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Minimální cena" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Přespat vypočítanou hodnotu pro minimální cenu" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Měna minimální ceny" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Maximální cena" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Přespat vypočítanou hodnotu pro maximální cenu" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Měna maximální ceny" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Aktualizovat" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Aktualizovat cenu pro díl" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Nelze převést z poskytnutých měn na {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Minimální cena musí být vyšší než maximální cena" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Maximální cena nesmí být nížší než minimální cena" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "Množství musí být větší nebo rovno nule" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Vybrat nadřazenou sestavu" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Vyberte komponentu dílu" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Vyberte díl pro kopírování kusovníku z" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Odstranit existující data" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Odstranit existující položky kusovníku před kopírováním" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Zahrnout zděděné" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Zahrnout položky kusovníku které jsou zdědené z šablonových dílů" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Přeskočit neplatné řádky" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Povolte tuto možnost pro přeskočení neplatných řádků" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Kopírovat náhradní díly" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopírovat náhradní díly při duplikaci položek kusovníku" @@ -7516,7 +7560,7 @@ msgstr "Rámeček" msgid "Print a border around each label" msgstr "Vytisknout okraj kolem každého štítku" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "Na šířku" @@ -7596,64 +7640,77 @@ msgstr "Poskytuje podporu pro skenování TME čárových kódů" msgid "The Supplier which acts as 'TME'" msgstr "Dodavatel, který funguje jako 'TME'" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Pouze pracovníci mohou spravovat pluginy" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "Pouze superuživatelské účty mohou spravovat pluginy" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "Instalace pluginu je zakázana" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "Není k dispozici žádný název balíčku nebo URL pro instalaci" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "Neplatné znaky v názvu balíčku nebo v URL" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Plugin byl úspěšně nainstalován" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Plugin nainstalovaný do {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "Plugin nebyl nalezen v registru" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "Plugin není plugin balíček" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Název balíčku pluginu nebyl nalezen" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Pouze pracovníci mohou spravovat pluginy" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "Odinstalace pluginu je zakázána" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "Plugin nemůže být odinstalován, protože je aktuálně aktivní" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "Plugin nemůže být odinstalován, protože je povinný" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "Plugin nemůže být odinstalován, protože to je vzorový plugin" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "Plugin nemůže být odinstalován, protože to je vestavěný plugin" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "Plugin není nainstalován" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Inslalace pluginu nebyla nalezena" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Plugin odinstalován úspěšně" @@ -7900,55 +7957,55 @@ msgstr "Instalace nebyla potvrzena" msgid "Either packagename or URL must be provided" msgstr "Musí být uveden název balíčku nebo URL" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Plné načtení" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Provede plné načtení registru pluginů" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Vynutit přenačtení" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Vynutit přenačtění registru pluginů, i když je jich načten" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Sbírat pluginy" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Sbírat pluginy a přidávat je do registru" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Aktivovat plugin" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Aktivovat tento plugin" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "Povinný plugin nemůže být vypnut" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Odstranit nastavení" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Odstranit konfiguraci pluginu z databáze" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "Uživatel pro kterého platí toto nastavení" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "Položky" @@ -7964,7 +8021,7 @@ msgstr "Plugin nepodporuje tisk štítků" msgid "Invalid label dimensions" msgstr "Neplatné rozměry štítku" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "Žádné platné položky nebyly k šabloně poskytnuté" @@ -7988,152 +8045,156 @@ msgstr "Letter" msgid "Template file with this name already exists" msgstr "Šablona s tímto názvem již existuje" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "Název šablony" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "Popis šablony" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "Číslo revize (automatické navýšení)" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "Připojit k modelu při tisku" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "Uložit výstup reportu jako přílohu v instanci propojeného modelu při tisku" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "Šablona pro názvy souborů" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "Šablona pro generování názvů souborů" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "Šablona je povolena" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "Cílový typ modelu pro šablonu" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Filtry" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "Filtry dotazů šablon (čárkou oddělený seznam klíčových=dvojic hodnot)" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "Vzorový soubor" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "Velikost stránky pro PDF reporty" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "Vykreslit report v orientaci na šířku" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "Sloučit" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "Vykreslit jeden report proti vybraným položkám" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "Report generován ze šablony {self.name}" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "Chyba syntaxe šablony" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "Chyba při vykreslování reportu" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "Chyba při generování reportu" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "Chyba při slučování výstupů reportu" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Šířka [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "Šířka štítku zadaná v mm" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Výška [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "Výška štítku uvedená v mm" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "Chyba při tisku štítků" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "Úryvek" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "Nahlásit soubor úryvku" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "Popis souboru úryvku" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "Aktivum" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "Nahlásit soubor aktiva" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "Popis souboru aktiva" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "Uživatel musí být ověřen pro uložení šablon reportu" + +#: report/serializers.py:118 msgid "Select report template" msgstr "Vybrat šablonu reportu" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "Seznam primárních klíčů k zahrnutí v reportu" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "Vybrat šablonu pro štítek" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "Tiskový plugin" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "Vybrat plugin pro tisk štítků" @@ -8231,7 +8292,7 @@ msgstr "Report o testu skladové položky" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Instalované položky" @@ -8266,15 +8327,15 @@ msgstr "Žádný výsledek" #: report/templatetags/report.py:166 msgid "Invalid media file path" -msgstr "" +msgstr "Neplatná cesta k media souboru" #: report/templatetags/report.py:185 msgid "Invalid static file path" -msgstr "" +msgstr "Neplatná cesta ke statickému souboru" #: report/templatetags/report.py:287 msgid "Asset file not found" -msgstr "" +msgstr "Soubor aktiva nebyl nalezen" #: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" @@ -8282,13 +8343,13 @@ msgstr "Soubor obrázku nebyl nalezen" #: report/templatetags/report.py:430 msgid "No image file specified" -msgstr "" +msgstr "Nebyl zadán žádný obrázek" #: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "part_image tag vyžaduje instanci dílu" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "company_image tag vyžaduje intanci společnosti" @@ -8304,7 +8365,7 @@ msgstr "Filtrovat dle nejvyšší lokace" msgid "Include sub-locations in filtered results" msgstr "Zahrnout pod-lokace ve filtrovaných výsledcích" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Nadřazená místo" @@ -8388,7 +8449,7 @@ msgstr "Datum expirace ped" msgid "Expiry date after" msgstr "Datum expirace po" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Zastaralé" @@ -8522,7 +8583,7 @@ msgstr "Díl musí být zadán" msgid "Stock items cannot be located into structural stock locations!" msgstr "Skladové položky nelze umístit do strukturálních skladových umístění!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Nelze vytvořit skladovou položku pro virtuální díl" @@ -8567,7 +8628,7 @@ msgstr "Vyberte odpovídající díl dodavatele pro tuto skladovou položku" msgid "Where is this stock item located?" msgstr "Kde se tato skladová položka nachází?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Balení, ve kterém je tato skladová položka uložena" @@ -8583,7 +8644,7 @@ msgstr "Je tato položka nainstalována v jiné položce?" msgid "Serial number for this item" msgstr "Sériové číslo pro tuto položku" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Kód šarže pro tuto skladovou položku" @@ -8696,7 +8757,7 @@ msgstr "Skladová položka je ve výrobě" msgid "Serialized stock cannot be merged" msgstr "Serializované zásoby nelze sloučit" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Duplicitní skladové položky" @@ -8820,7 +8881,7 @@ msgstr "Vyberte díl, pro který se má vygenerovat sériové číslo" msgid "Quantity of serial numbers to generate" msgstr "Množství sériových čísel k vygenerování" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "Testovací šablona pro tento výsledek" @@ -8844,222 +8905,222 @@ msgstr "Nadřazená položka" msgid "Parent stock item" msgstr "Nadřazená skladová položka" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Použít velikost balení při přidání: definované množství je počet v balení" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "Použít velikost balení" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Zadejte sériová čísla pro nové položky" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Číslo dílu dodavatele" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Expirováno" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Podřízené položky" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "Sledování položky" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "Nákupní cena této skladové položky za jednotku nebo balení" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Zadejte počet skladových položek k serializaci" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "Nebyla poskytnuta žádná skladová položka" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Množství nesmí překročit dostupné skladové množství ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Cílové skladové umístění" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "K tomuto dílu nelze přiřadit sériová čísla" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Sériová čísla již existují" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Vyberte skladovou položku k instalaci" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Množství k instalaci" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Zadejte množství položek k instalaci" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Přidat poznámku o transakci (volitelné)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "Množství k instalaci musí být alespoň 1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Skladová položka je nedostupná" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Vybraný díl není v kusovníku" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "Množství k instalaci nesmí překročit dostupné množství" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Cílové umístění pro odinstalovanou položku" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Vyberte díl pro převedení do skladové položky" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "Vybraný díl není platnou volbou pro převod" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Nelze převést skladovou položku s přiřazeným dílem dodavetele" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Stavový kód skladové položky" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Vybrat skladové položky pro změnu stavu" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Nejsou vybrány žádné skladové položky" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Podumístění" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Nadřazené skladové umístění" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Díl musí být prodejný" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Položka je přidělena prodejní objednávce" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Položka je přidělena výrobnímu příkazu" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Zákazník, kterému mají být přiděleny skladové položky" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "Vybraná společnost není zákazník" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Poznámky ke skladové položce" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Musí být poskytnut seznam skladových položek" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Poznámky ke sloučení skladových položek" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Povolit neodpovídající dodavatele" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Povolit sloučení skladových položek s různými díly dodavatele" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Povolit neodpovídající stav" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Povolit sloučení skladových položek s různými stavovými kódy" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Musí být poskytnuty alespoň dvě skladové položky" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Beze změny" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Hodnota primárního klíče skladové položky" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "Skladová položka není skladem" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "Skladová položka je již na skladě" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "Množství nesmí být záporné" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Poznámky ke skladovací transakci" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "Sloučit do existující zásoby" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "Sloučit vrácené položky do existujích položek, pokud je to možné" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "Další sériové číslo" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "Předchozí sériové číslo" @@ -9541,83 +9602,99 @@ msgstr "Prodejní objednávky" msgid "Return Orders" msgstr "Návratové objednávky" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Uživatelské jméno" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Křestní jméno" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Křestní jméno uživatele" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Příjmení" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Příjmení uživatele" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Emailová adresa uživatele" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Personál" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "Uživatel musí být autentizován" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Má tento uživatel oprávnění personálu" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "Pouze superuživatel může vytvořit token pro jiného uživatele" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "Administrátor" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "Má tento uživatel administrativní oprávnění" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Super-uživatel" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Je tento uživatel superuživatel" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Je tento uživatelský účet aktivní" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Pouze superuživatel může toto pole upravit" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "Heslo" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Heslo uživatele" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "Přepsat varování" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Přepsat varování o pravidlech pro heslo" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "Personál" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "Má tento uživatel oprávnění personálu" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "Nemáte oprávnění k vytváření uživatelů" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Váš účet byl vytvořen." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Pro přihlášení použijte funkci obnovení hesla" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Vítejte v InvenTree" diff --git a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po index 69700adac9..cae9326c6d 100644 --- a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Danish\n" "Language: da_DK\n" @@ -49,7 +49,7 @@ msgstr "Ingen data angivet" msgid "This field must be unique." msgstr "Dette felt skal være unikt." -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Bruger har ikke tilladelse til at se denne model" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Kunne ikke konvertere {original} til {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Ugyldigt antal angivet" @@ -104,13 +104,13 @@ msgstr "Angiv dato" msgid "Invalid decimal value" msgstr "Ugyldig decimalværdi" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Bemærkninger" @@ -123,75 +123,91 @@ msgstr "Værdi '{name}' vises ikke i mønsterformat" msgid "Provided value does not match required pattern: " msgstr "Den angivne værdi matcher ikke det påkrævede mønster: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Kan ikke serialisere mere end 1000 elementer på én gang" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Serienummer streng er tom" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Duplikeret serienummer" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Ugyldig gruppe: {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Ingen serienumre fundet" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Antal unikke serienumre ({n}) skal matche antal ({q})" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Fjern HTML-tags fra denne værdi" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "Data indeholder forbudt markdown indhold" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Forbindelsesfejl" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Serveren svarede med ugyldig statuskode" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Der opstod en fejl" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Serveren svarede med ugyldig Content-Length værdi" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Billedstørrelsen er for stor" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Billeddownload overskred maksimumstørrelsen" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Fjernserver returnerede tomt svar" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Angivet URL er ikke en gyldig billedfil" @@ -199,7 +215,7 @@ msgstr "Angivet URL er ikke en gyldig billedfil" msgid "Log in to the app" msgstr "Log ind på appen" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-mail" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Ugyldigt valg" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Navn" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Beskrivelse" msgid "Description (optional)" msgstr "Beskrivelse (valgfri)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Sti" @@ -320,51 +336,51 @@ msgstr "En fejl blev logget af serveren." msgid "Image" msgstr "Billede" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Skal være et gyldigt tal" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Vælg valuta fra tilgængelige muligheder" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Dette felt kan ikke være tomt." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Ugyldig værdi" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Eksternt billede" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL til ekstern billedfil" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Download af billeder fra ekstern URL er ikke aktiveret" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "Kinesisk (forenklet)" msgid "Chinese (Traditional)" msgstr "Kinesisk (traditionelt)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Opdatering tilgængelig" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "En opdatering til InvenTree er tilgængelig" @@ -536,7 +552,7 @@ msgstr "Ugyldig fysisk enhed" msgid "Not a valid currency code" msgstr "Ikke en gyldig valutakode" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Ordre status" @@ -545,21 +561,21 @@ msgstr "Ordre status" msgid "Parent Build" msgstr "Overordnet produktion" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -653,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Produktion skal anulleres, før den kan slettes" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Forbrugsvare" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Valgfri" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -671,32 +687,32 @@ msgstr "" msgid "Tracked" msgstr "Sporet" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Ordre Udestående" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Allokeret" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Tilgængelig" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -704,26 +720,26 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Produktionsordre" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Lokation" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "Produktionsordre reference" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Salgsordrereference" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Kilde Lokation" @@ -845,16 +861,16 @@ msgstr "Produktions Status" msgid "Build status code" msgstr "Produktions statuskode" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Batch Kode" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Batch kode til dette produktions output" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Oprettelsesdato" @@ -875,7 +891,7 @@ msgstr "Projekteret afslutningsdato" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Dato for afslutning" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Prioritet af denne byggeordre" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Projektkode" @@ -948,7 +964,7 @@ msgstr "Bygningsordre {build} er fuldført" msgid "A build order has been completed" msgstr "En byggeordre er fuldført" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -964,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1001,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Lagervarer" @@ -1083,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Del Navn" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Indtast serienumre for bygge output" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Automatisk alloker serienumre" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Følgende serienumre findes allerede eller er ugyldige" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Ikke tilladt" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Accepter som forbrugt af denne byggeordre" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Accepter Ikke tildelt" -#: build/serializers.py:775 +#: build/serializers.py:782 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:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Accepter ufuldført" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Bygge linje" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Varen skal være på lager" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Tilgængeligt antal ({q}) overskredet" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Stykliste Reference" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "Stykliste del ID" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Stykliste Del Navn" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Byg" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Leverandør Del" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Tildelt Antal" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Stykliste Del" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "I Produktion" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Ekstern Lager" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Tilgængelig Lager" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "På Hold" msgid "Cancelled" msgstr "Annulleret" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1534,11 +1550,11 @@ msgstr "" msgid "No plugin" msgstr "Ingen plugin" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Projekt Kode Label" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Opdateret" @@ -1600,7 +1616,7 @@ msgstr "Nøglestrengen skal være unik" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Bruger" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Pris" @@ -1633,10 +1649,10 @@ msgstr "" msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiv" @@ -1660,11 +1676,11 @@ msgstr "Hemmelighed" msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "Besked ID" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "" @@ -1714,7 +1730,7 @@ msgstr "Titel" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Forfatter" msgid "Summary" msgstr "Opsummering" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Læs" @@ -1797,7 +1813,7 @@ msgstr "Manglende fil" msgid "Missing external link" msgstr "Manglende eksternt link" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "Filstørrelse" msgid "File size in bytes" msgstr "Filstørrelse i bytes" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Værdi" @@ -1874,7 +1890,7 @@ msgstr "Numerisk værdi, der vil blive gemt i modeldatabasen" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Label" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "" @@ -1998,334 +2014,334 @@ msgstr "" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "Parameter skabelon navn skal være unikt" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "Stregkode Scan" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "Stregkode data" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "Sendt" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "Fejlede" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "Leveret" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "Bekræftet" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "Indkommende" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "Udgående" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "Intet Svar" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "Spor Levering" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "Spor Læst" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "Spor Klik" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "Global ID" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identifikator for denne meddelelse (leveres muligvis af et eksternt system)" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "Tråd ID" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "E-mail Tråd" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "E-mail Tråde" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Nøgle" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Filnavn" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Firmanavn" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Standardvaluta" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "Liste over understøttede valutakoder" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "Valuta Opdaterings Interval" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "Maksimum tilladte downloadstørrelse for fjernbillede" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "" @@ -4163,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4181,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4210,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4258,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4307,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4797,27 +4833,27 @@ msgstr "" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4919,413 +4955,421 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "" -#: order/models.py:1800 -msgid "Line item reference" +#: order/models.py:1814 +msgid "Line Number" msgstr "" -#: order/models.py:1807 -msgid "Line item notes" +#: order/models.py:1815 +msgid "Line number for this item (optional)" msgstr "" #: order/models.py:1822 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1829 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Afsendt" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5372,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5797,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5818,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5933,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "" @@ -5966,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8583,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8696,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Fornavn på brugeren" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Efternavn" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Efternavn på brugeren" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Email adresse på brugeren" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Personale" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Har denne bruger personale tilladelser" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superbruger" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Er denne bruger en superbruger" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Er denne brugerkonto aktiv" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Kun en superbruger kan justere dette felt" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "Adgangskode" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Brugers adgangskode" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "Tilsidesæt advarsel" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Tilsidesæt advarslen om adgangskode regler" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "Du har ikke tilladelse til at oprette brugere" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Din konto er oprettet." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Benyt funktionen til nulstilling af adgangskode til at logge ind" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Velkommen til InvenTree" diff --git a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po index 396af69100..24a07e0a1d 100644 --- a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -49,7 +49,7 @@ msgstr "Keine Daten verfügbar" msgid "This field must be unique." msgstr "Dieses Feld muss eindeutig sein." -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Benutzer hat keine Berechtigung, dieses Modell anzuzeigen" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Konnte {original} nicht in {unit} umwandeln" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Keine gültige Menge" @@ -104,13 +104,13 @@ msgstr "Datum eingeben" msgid "Invalid decimal value" msgstr "Ungültiger Dezimalwert" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Notizen" @@ -123,75 +123,91 @@ msgstr "Wert '{name}' hält das Musterformat nicht ein" msgid "Provided value does not match required pattern: " msgstr "Angegebener Wert entspricht nicht dem benötigten Muster: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Kann nicht mehr als 1000 Elemente auf einmal serialisieren" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Keine Seriennummer angegeben" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Duplizierter Seriennummer" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Ungültige Gruppe: {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Gruppenbereich {group} überschreitet die zulässige Menge ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Keine Seriennummern gefunden" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Anzahl der eindeutigen Seriennummern ({n}) muss mit der Anzahl ({q}) übereinstimmen" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Entferne HTML-Tags von diesem Wert" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "Daten enthalten verbotene Markdown-Inhalte" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Verbindungsfehler" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Server antwortete mit ungültigem Statuscode" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Ausnahme aufgetreten" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Server antwortete mit ungültigem Wert für die Inhaltslänge" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Bild ist zu groß" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Bilddownload überschreitet maximale Größe" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Remote-Server gab leere Antwort zurück" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Angegebene URL ist kein gültiges Bild" @@ -199,7 +215,7 @@ msgstr "Angegebene URL ist kein gültiges Bild" msgid "Log in to the app" msgstr "Bei der App anmelden" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Email" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Ungültige Auswahl" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Name" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Beschreibung" msgid "Description (optional)" msgstr "Beschreibung (optional)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Pfad" @@ -320,51 +336,51 @@ msgstr "Ein Fehler wurde vom Server protokolliert." msgid "Image" msgstr "Bild" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Muss eine gültige Nummer sein" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Währung" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Währung aus verfügbaren Optionen auswählen" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Dieses Feld darf nicht leer sein." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Ungültiger Wert" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Grafiken aus externen Quellen" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL der Remote-Bilddatei" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Das Herunterladen von Bildern von Remote-URLs ist nicht aktiviert" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Fehler beim Herunterladen des Bildes von entfernter URL" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "Content type stimmt nicht mit der benötigten Mixin-Klasse überein" @@ -520,11 +536,11 @@ msgstr "Chinesisch (Vereinfacht)" msgid "Chinese (Traditional)" msgstr "Chinesisch (Traditionell)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Update verfügbar" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "Ein Update für InvenTree ist verfügbar" @@ -536,7 +552,7 @@ msgstr "Ungültige physikalische Einheit" msgid "Not a valid currency code" msgstr "Kein gültiger Währungscode" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Bestellstatus" @@ -545,21 +561,21 @@ msgstr "Bestellstatus" msgid "Parent Build" msgstr "Eltern-Bauauftrag" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Varianten einschließen" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "Varianten einschließen" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "Varianten einschließen" msgid "Part" msgstr "Teil" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategorie" @@ -653,16 +669,16 @@ msgstr "Baum ausschließen" msgid "Build must be cancelled before it can be deleted" msgstr "Bauauftrag muss abgebrochen werden, bevor er gelöscht werden kann" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Verbrauchsmaterial" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Optional" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Baugruppe" @@ -671,32 +687,32 @@ msgstr "Baugruppe" msgid "Tracked" msgstr "Nachverfolgt" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Prüfbar" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Offene Bestellung" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Zugeordnet" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Verbraucht" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Verfügbar" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Bestellt" @@ -704,26 +720,26 @@ msgstr "Bestellt" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Bauauftrag" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Lagerort" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Bauprodukt" @@ -767,8 +783,8 @@ msgstr "Zieldatum muss nach dem Startdatum liegen" msgid "Build Order Reference" msgstr "Bauauftragsreferenz" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Auftrag Referenz" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Quell-Lagerort" @@ -845,16 +861,16 @@ msgstr "Bauauftrags-Status" msgid "Build status code" msgstr "Bau-Statuscode" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Losnummer" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Losnummer für dieses Endprodukt" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Erstelldatum" @@ -875,7 +891,7 @@ msgstr "geplantes Fertigstellungsdatum" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Zieldatum für Bauauftrag-Fertigstellung." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Fertigstellungsdatum" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Priorität dieses Bauauftrags" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Projektcode" @@ -948,7 +964,7 @@ msgstr "Bauauftrag {build} wurde fertiggestellt" msgid "A build order has been completed" msgstr "Ein Bauauftrag wurde fertiggestellt" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Seriennummern müssen für nachverfolgbare Teile angegeben werden" @@ -964,23 +980,23 @@ msgstr "Endprodukt bereits hergstellt" msgid "Build output does not match Build Order" msgstr "Endprodukt stimmt nicht mit dem Bauauftrag überein" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Anzahl muss größer Null sein" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Menge kann nicht größer als die Ausgangsmenge sein" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Build Ausgabe {serial} hat nicht alle erforderlichen Tests bestanden" @@ -1001,10 +1017,10 @@ msgstr "Bauauftragsposition" msgid "Build object" msgstr "Objekt bauen" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Objekt bauen" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Zugewiesene Menge ({q}) darf nicht verfügbare Menge ({a}) übersteigen" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "BestandObjekt ist zu oft zugewiesen" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Lagerartikel" @@ -1083,378 +1099,378 @@ msgstr "Ziel-Lagerartikel" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Name des Teils" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Endprodukt" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Endprodukt stimmt nicht mit übergeordnetem Bauauftrag überein" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Endprodukt entspricht nicht dem Teil des Bauauftrags" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Dieses Endprodukt wurde bereits fertiggestellt" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Dieses Endprodukt ist nicht vollständig zugewiesen" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Menge der Endprodukte angeben" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Ganzzahl für verfolgbare Teile erforderlich" -#: build/serializers.py:337 +#: build/serializers.py:344 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:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Seriennummer" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Seriennummer für dieses Endprodukt eingeben" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Lagerort für Bauprodukt" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Seriennummern automatisch zuweisen" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Benötigte Lagerartikel automatisch mit passenden Seriennummern zuweisen" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Die folgenden Seriennummern existieren bereits oder sind ungültig" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Eine Liste von Endprodukten muss angegeben werden" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Lagerort für ausgemusterte Ausgänge" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Zuteilungen verwerfen" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Bestandszuteilung für ausgemusterte Endprodukte verwerfen" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Grund für das Verwerfen des Bauauftrages/der Bauaufträge" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Lagerort für fertige Endprodukte" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Unvollständige Zuweisung akzeptieren" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Endprodukte fertigstellen, auch wenn Bestand nicht fertig zugewiesen wurde" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Zugewiesen Bestand verbrauchen" -#: build/serializers.py:691 +#: build/serializers.py:698 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:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Unfertige Endprodukte entfernen" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Lösche alle noch nicht abgeschlossenen Endprodukte" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Nicht erlaubt" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Als von diesem Bauauftrag verbraucht setzen" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Bestandszuordnung vor dem Abschluss dieses Bauauftrags freigeben" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Überbelegter Lagerbestand" -#: build/serializers.py:757 +#: build/serializers.py:764 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:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Der Bestand einiger Lagerartikel ist überbelegt" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Nicht zugewiesene akzeptieren" -#: build/serializers.py:775 +#: build/serializers.py:782 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:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Benötigter Bestand wurde nicht vollständig zugewiesen" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Unvollständig Zuweisung akzeptieren" -#: build/serializers.py:793 +#: build/serializers.py:800 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:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Benötigte Teil-Anzahl wurde noch nicht fertiggestellt" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Bauauftrag hat unvollständige Aufbauten" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Bauauftragsposition" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Endprodukt" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Endprodukt muss auf den gleichen Bauauftrag verweisen" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Bauauftragspositionsartikel" -#: build/serializers.py:926 +#: build/serializers.py:933 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:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Teil muss auf Lager sein" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Verfügbare Menge ({q}) überschritten" -#: build/serializers.py:991 +#: build/serializers.py:998 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:999 +#: build/serializers.py:1006 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:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Zuweisungen müssen angegeben werden" -#: build/serializers.py:1087 +#: build/serializers.py:1094 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:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Lagerort ausschließen" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Lagerartikel vom ausgewählten Ort ausschließen" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Wechselbares Lagerbestand" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Lagerartikel an mehreren Standorten können austauschbar verwendet werden" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Ersatzbestand" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Zuordnung von Ersatzteilen erlauben" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Optionale Positionen" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Optionale Stücklisten-Positionen dem Bauauftrag hinzufügen" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "Alle Artikel" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "Unverfolgte Artikel" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "Verfolgte Artikel" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "Item-Typ" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "Elementtyp zur automatischen Zuweisung auswählen" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Stücklisten-Referenz" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "Stückliste Teil-ID" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Stückliste Teil-Name" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Zusammenbau" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Zuliefererteil" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Zugewiesene Menge" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Teilkategorienname" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Nachverfolgbar" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Vererbt" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Varianten zulassen" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Stücklisten-Position" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "In Produktion" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Geplant zum Erstellen" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Externes Lager" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Verfügbarer Bestand" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Verfügbares Ersatzmaterial" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Verfügbarer Varianten Lagerbestand" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "Verbrauchsmenge überschreitet die zugewiesene Menge" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "Optionale Notizen für den Bestandsverbrauch" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "Dupliziere Bauauftrag Artikelzuordnung" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "Mindestens ein Element oder eine Zeile muss angegeben werden" @@ -1478,7 +1494,7 @@ msgstr "Pausiert" msgid "Cancelled" msgstr "Storniert" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "Überfälliger Bauauftrag" msgid "Build order {bo} is now overdue" msgstr "Bauauftrag {bo} ist jetzt überfällig" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "Link" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "Datei" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "Benutzer hat keine Berechtigung zum Löschen der Anhänge" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Benutzer hat keine Berechtigung zum Löschen des Anhangs" @@ -1534,11 +1550,11 @@ msgstr "" msgid "No plugin" msgstr "Kein Plugin" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Aktualisiert" @@ -1600,7 +1616,7 @@ msgstr "Schlüsseltext muss eindeutig sein" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Benutzer" msgid "Price break quantity" msgstr "Preisstaffelungs Anzahl" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Preis" @@ -1633,10 +1649,10 @@ msgstr "Endpunkt, an dem dieser Webhook empfangen wird" msgid "Name for this webhook" msgstr "Name für diesen Webhook" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiv" @@ -1660,11 +1676,11 @@ msgstr "Geheimnis" msgid "Shared secret for HMAC" msgstr "Shared Secret für HMAC" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "Nachrichten-ID" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "Eindeutige Kennung für diese Nachricht" @@ -1714,7 +1730,7 @@ msgstr "Titel" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Autor" msgid "Summary" msgstr "Zusammenfassung" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Gelesen" @@ -1797,7 +1813,7 @@ msgstr "Fehlende Datei" msgid "Missing external link" msgstr "Fehlender externer Link" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "Modelltyp" @@ -1833,7 +1849,7 @@ msgstr "Dateigröße" msgid "File size in bytes" msgstr "Dateigröße in Bytes" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Ungültiger Modelltyp für Anhang angegeben" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Wert" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "Name des Bundeslandes" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Bezeichnung" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "Name muss sich von den Namen des Referenzstatus unterscheiden" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "Auswahlliste" @@ -1982,7 +1998,7 @@ msgstr "Standardeintrag" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Erstellt" @@ -1998,334 +2014,334 @@ msgstr "Zuletzt aktualisiert" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "Parameter Vorlage" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "Checkbox-Parameter können keine Einheiten haben" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "Checkbox-Parameter können keine Auswahl haben" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "Auswahl muss einzigartig sein" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "Vorlagen-Name des Parameters muss eindeutig sein" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "Name des Parameters" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "Einheiten" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "Physikalische Einheiten für diesen Parameter" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "Parameter-Beschreibung" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "Checkbox" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "Ist dieser Parameter eine Checkbox?" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "Auswahlmöglichkeiten" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "Gültige Optionen für diesen Parameter (durch Kommas getrennt)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Aktiviert" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "Ungültige Auswahl für Parameterwert" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Vorlage" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Wert" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "Parameter Wert" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Notiz" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Optionales Notizfeld" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "Barcode Scan" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "Zeitstempel" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "Kontext" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Ergebnis" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "Angekündigt" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "Gesendet" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "Fehlgeschlagen" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "Zugestellt" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "Bestätigt" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "Eingehend" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "Ausgehend" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "Keine Rückmeldung" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Schlüssel" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Wird ausgeführt" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Anstehende Aufgaben" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Geplante Aufgaben" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Fehlgeschlagene Aufgaben" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Aufgabe-ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Eindeutige Aufgaben-ID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Sperren" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Sperrzeit" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Aufgabenname" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funktion" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Funktionsname" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Parameter" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Aufgaben-Parameter" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Schlüsselwort Parameter" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Schlüsselwort Parameter für Aufgaben" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Dateiname" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Modelltyp" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Benutzer hat keine Berechtigung, Anhänge für dieses Modell zu erstellen oder zu bearbeiten" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Keine Gruppe" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "Seiten-URL ist durch die Konfiguration gesperrt" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Neustart erforderlich" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Eine Einstellung wurde geändert, die einen Neustart des Servers erfordert" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Ausstehende Migrationen" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Anzahl der ausstehenden Datenbankmigrationen" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Name der Serverinstanz" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Kurze Beschreibung der Instanz" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Name der Instanz verwenden" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Den Namen der Instanz in der Titelleiste verwenden" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Anzeige von `Über` einschränken" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Zeige das `Über` Fenster nur Administratoren" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Firmenname" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "interner Firmenname" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "Basis-URL" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "Basis-URL für dieses Instanz" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Standardwährung" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "Wählen Sie die Basiswährung für Preisberechnungen aus" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "Verfügbare Währungen" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "Liste der unterstützten Währungskürzel" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "Währungsaktualisierungsintervall" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Wie oft Wechselkurse aktualisiert werden sollen (auf Null zum Deaktivieren setzen)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "Tage" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "Währungs-Aktualisierungs-Plugin" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "Zu verwendendes Währungs-Aktualisierungs-Plugin" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "Von URL herunterladen" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "Herunterladen von externen Bildern und Dateien von URLs erlaubt" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "Download-Größenlimit" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "Maximal zulässige Größe für heruntergeladene Bilder" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "Benutzer-Agent zum Herunterladen von Daten" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Überschreiben des Benutzer-Agenten, der verwendet wird, um Bilder und Dateien von externer Servern herunterzuladen (leer für die Standardeinstellung)" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "Strenge URL-Prüfung" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "Erfordert die Schema-Spezifikation bei der Validierung von URLs" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "Prüfungsintervall aktualisieren" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "Wie oft soll nach Updates gesucht werden? (auf 0 setzen zum Deaktivieren)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Automatische Sicherung" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "Automatische Sicherung der Datenbank- und Mediendateien aktivieren" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "Intervall für automatische Sicherung" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "Anzahl der Tage zwischen automatischen Sicherungen" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "Aufgabenlöschinterval" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "Ergebnisse der Hintergrundaufgabe werden nach der angegebenen Anzahl von Tagen gelöscht" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "Löschintervall für Fehlerprotokolle" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "Fehlerprotokolle werden nach der angegebenen Anzahl von Tagen gelöscht" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "Löschintervall für Benachrichtigungen" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "Benutzerbenachrichtigungen werden nach der angegebenen Anzahl von Tagen gelöscht" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Bacode-Feature verwenden" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "Barcode-Scanner Unterstützung im Webinterface aktivieren" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "Barcode-Eingabeverzögerung" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "Verzögerungszeit bei Barcode-Eingabe" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "Barcode Webcam-Unterstützung" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "Barcode-Scannen über Webcam im Browser erlauben" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "Artikelrevisionen" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "Revisions-Feld für Artikel aktivieren" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "Löschen aus Baugruppe erlauben" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "Erlaube das Löschen von Teilen, die in einer Baugruppe verwendet werden" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "RegEx Muster für die Zuordnung von Teil-IPN" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "Ändern von IPN erlaubt" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "Ändern der IPN während des Bearbeiten eines Teils erlaubt" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "Teil-Stückliste kopieren" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "Stückliste von Teil kopieren wenn das Teil dupliziert wird " -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "Teil-Parameter kopieren" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "Parameter-Daten für dieses Teil kopieren wenn das Teil dupliziert wird" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "Teil-Testdaten kopieren" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "Test-Daten für dieses Teil kopieren wenn das Teil dupliziert wird" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "Kategorie-Parametervorlage kopieren" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "Kategorie-Parameter Vorlagen kopieren wenn ein Teil angelegt wird" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "Teile sind standardmäßig Vorlagen" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "Teile können standardmäßig aus anderen Teilen angefertigt werden" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponente" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "Teile können standardmäßig in Baugruppen benutzt werden" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Kaufbar" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "Artikel sind grundsätzlich kaufbar" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Verkäuflich" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "Artikel sind grundsätzlich verkaufbar" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "Artikel sind grundsätzlich verfolgbar" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Virtuell" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "Teile sind grundsätzlich virtuell" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "Verwandte Teile anzeigen" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "Verwandte Teile eines Teils anzeigen" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "Initialer Lagerbestand" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "Erstellen von Lagerbestand beim Hinzufügen eines neuen Teils erlauben" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "Initiale Lieferantendaten" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Erstellen von Lieferantendaten beim Hinzufügen eines neuen Teils erlauben" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "Anzeigeformat für Teilenamen" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "Format für den Namen eines Teiles" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "Standardsymbol der Teilkategorie" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "Standardsymbol der Teilkategorie (leer bedeutet kein Symbol)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "Dezimalstellen für minimalen Preis" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Mindestanzahl der Dezimalstellen bei der Darstellung der Preisdaten" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "Dezimalstellen für maximalen Preis" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maximale Anzahl der Dezimalstellen bei der Darstellung der Preisdaten" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "Zulieferer-Preise verwenden" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Lieferanten-Staffelpreise in die Gesamt-Preisberechnungen einbeziehen" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "Kaufverlauf überschreiben" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historische Bestellungspreise überschreiben die Lieferanten-Staffelpreise" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "Lagerartikel-Preis verwenden" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Preise aus manuell eingegebenen Lagerdaten für Preisberechnungen verwenden" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "Lagerartikelpreis Alter" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Lagerartikel, die älter als diese Anzahl an Tagen sind, von der Preisberechnung ausschließen" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "Variantenpreise verwenden" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "Variantenpreise in die Gesamt-Preisberechnungen einbeziehen" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "Nur aktive Varianten" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "Nur aktive Variantenteile zur Berechnung der Variantenbepreisung verwenden" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "Intervall für Neuberechnung von Preisen" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "Anzahl der Tage bis die Teile-Preisberechnungen automatisch aktualisiert werden" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Interne Preise" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "Interne Preise für Teile aktivieren" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "Interne Preisüberschreibung" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "Falls verfügbar, überschreiben interne Preise Preispannenberechnungen" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "Labeldruck aktivieren" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "Labeldruck über die Website aktivieren" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "Label Bild DPI" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI-Auflösung bei der Erstellung von Bilddateien für Etikettendruck-Plugins" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Berichte aktivieren" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "Berichterstellung aktivieren" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "Entwickler-Modus" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "Berichte im Entwickler-Modus generieren (als HTML)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "Berichtsfehler protokollieren" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "Fehler, die beim Erstellen von Berichten auftreten, protokollieren" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Seitengröße" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "Standardseitenformat für PDF-Bericht" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "Parameter Einheiten durchsetzen" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "Wenn Einheiten angegeben werden, müssen die Parameterwerte mit den angegebenen Einheiten übereinstimmen" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "Global einzigartige Seriennummern" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "Seriennummern für Lagerartikel müssen global eindeutig sein" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "Erschöpften Lagerartikel löschen" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "Legt das Standardverhalten fest, wenn ein Lagerartikel aufgebraucht ist" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "Losnummer Vorlage" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "Vorlage für die Generierung von Standard-Losnummern für Lagerbestände" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "Bestands-Ablauf" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "Ablaufen von Bestand ermöglichen" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "Abgelaufenen Bestand verkaufen" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "Verkauf von abgelaufenem Bestand erlaubt" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "Bestands-Stehzeit" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "Anzahl an Tagen, an denen Bestand als abgestanden markiert wird, bevor sie ablaufen" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "Abgelaufenen Bestand verbauen" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "Verbauen von abgelaufenen Bestand erlaubt" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "Bestands-Eigentümerkontrolle" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "Eigentümerkontrolle für Lagerorte und Teile aktivieren" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "Standardsymbol für Lagerort" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "Standardsymbol für Lagerstandort (leer bedeutet kein Symbol)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "Zeige installierte Lagerartikel" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "Anzeige der installierten Lagerartikel in Bestandstabellen" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "Prüfe BOM bei der Installation von Elementen" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Installierte Lagerbestandteile müssen im BOM für den übergeordneten Teil vorhanden sein" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "Erlaube Verschieben von \"nicht auf Lager\" Bestand" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Lagerartikel, die nicht auf Lager sind, können zwischen Lagerstandorten übertragen werden" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "Bauauftragsreferenz-Muster" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Bauaufträge" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "Verantwortlicher Besitzer erforderlich" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "Jeder Bestellung muss ein verantwortlicher Besitzer zugewiesen werden" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Blockieren bis Test bestanden" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Verhindert die Fertigstellung bis alle erforderlichen Tests bestanden sind" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "Rücksendungen aktivieren" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "Aktivieren der Rücksendung-Funktion in der Benutzeroberfläche" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "Referenz Muster für Rücksendungen" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Rücksendungen" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "Abgeschlossene Rücksendungen bearbeiten" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "Bearbeitung von Rücksendungen nach Abschluss erlauben" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "Auftragsreferenz-Muster" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Aufträge" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "Auftrag Standardsendung" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "Erstelle eine Standardsendung für Aufträge" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "Abgeschlossene Aufträge bearbeiten" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Bearbeitung von Aufträgen nach Versand oder Abschluss erlauben" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "Versendete Bestellungen als abgeschlossen markieren" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Als versendet markierte Aufträge werden automatisch abgeschlossen und überspringen den Status \"Versandt\"" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "Bestellungsreferenz-Muster" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Bestellungen" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "Abgeschlossene Einkaufsaufträge bearbeiten" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Bearbeitung von Einkaufsaufträgen nach Versand oder Abschluss erlauben" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "Bestellungen automatisch abschließen" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Bestellung automatisch als abgeschlossen markieren, wenn der Empfang aller Artikel bestätigt wurde" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Passwort vergessen aktivieren" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "Passwort-vergessen-Funktion auf den Anmeldeseiten aktivieren" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Registrierung erlauben" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "Selbstregistrierung für Benutzer auf den Anmeldeseiten aktivieren" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "SSO aktivieren" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "SSO auf den Anmeldeseiten aktivieren" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "SSO Selbstregistrierung aktivieren" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Selbstregistrierung über SSO für Benutzer auf den Anmeldeseiten aktivieren" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "SSO Gruppensynchronisation aktivieren" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "SSO Gruppenschlüssel" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "Email-Adresse erforderlich" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "Benutzer müssen bei der Registrierung eine E-Mail angeben" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "SSO-Benutzer automatisch ausfüllen" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "Benutzer-Details automatisch aus SSO-Konto ausfüllen" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "E-Mail zweimal" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "Bei der Registrierung den Benutzer zweimal nach der E-Mail-Adresse fragen" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Passwort zweimal" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "Bei der Registrierung den Benutzer zweimal nach dem Passwort fragen" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "Erlaubte Domains" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Anmeldung auf bestimmte Domänen beschränken (kommagetrennt, beginnend mit @)" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "Gruppe bei Registrierung" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "MFA erzwingen" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "Benutzer müssen Multifaktor-Authentifizierung verwenden." -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "Plugins beim Start prüfen" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Beim Start überprüfen, ob alle Plugins installiert sind - Für Container aktivieren" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "Nach Plugin-Aktualisierungen suchen" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "Periodische Überprüfungen auf Updates für installierte Plugins aktivieren" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "URL-Integration aktivieren" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "Plugins zum Hinzufügen von URLs aktivieren" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "Navigations-Integration aktivieren" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "Plugins zur Integration in die Navigation aktivieren" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "App-Integration aktivieren" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "Plugins zum Hinzufügen von Apps aktivieren" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "Terminplan-Integration aktivieren" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "Geplante Aufgaben aktivieren" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "Ereignis-Integration aktivieren" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "Plugins ermöglichen auf interne Ereignisse zu reagieren" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "Externe Standorte ausschließen" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "Automatische Inventur-Periode" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "Vollständige Namen von Benutzern anzeigen" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "Vollständigen Namen von Benutzern anstatt Benutzername anzeigen" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "Teststation-Daten aktivieren" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "Teststation-Datenerfassung für Testergebnisse aktivieren" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "Teil ist aktiv" msgid "Manufacturer is Active" msgstr "Hersteller ist aktiv" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Lieferantenteil ist aktiv" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Internes Teil ist aktiv" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Lieferant ist aktiv" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Hersteller" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Firma" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Adresse" @@ -4163,7 +4195,7 @@ msgstr "Versandnotizen für interne Verwendung" msgid "Link to address information (external)" msgstr "Link zu Adressinformationen (extern)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Herstellerteil" @@ -4181,12 +4213,12 @@ msgstr "Teil auswählen" msgid "Select manufacturer" msgstr "Hersteller auswählen" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "MPN" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Hersteller-Teilenummer" @@ -4210,8 +4242,8 @@ msgstr "Packeinheiten müssen größer als Null sein" msgid "Linked manufacturer part must reference the same base part" msgstr "Verlinktes Herstellerteil muss dasselbe Basisteil referenzieren" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Zulieferer" msgid "Select supplier" msgstr "Zulieferer auswählen" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Lagerbestandseinheit (SKU) des Zulieferers" @@ -4258,8 +4290,8 @@ msgstr "Basiskosten" msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Verpackungen" @@ -4307,14 +4339,18 @@ msgstr "Standard-Währung für diesen Zulieferer" msgid "Company Name" msgstr "Firmenname" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Auf Lager" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Feld" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Spalte" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Fehler" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Gültig" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "Anzahl der zu druckenden Kopien für jedes Label" msgid "Connected" msgstr "Verbunden" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Unbekannt" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "Bestellreferenz" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Ausstehend" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "Hat Preise" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "Bestellung" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Bestellung abgeschlossen" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Internes Teil" @@ -4797,27 +4833,27 @@ msgstr "Internes Teil" msgid "Order Pending" msgstr "Bestellung ausstehend" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Fertig" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Bestellung" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "Bestellung" msgid "Sales Order" msgstr "Auftrag" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Auftragsbeschreibung (optional)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "Projektcode für diesen Auftrag auswählen" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "Link auf externe Seite" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Zieldatum" @@ -4919,413 +4955,421 @@ msgstr "Ansprechpartner für diesen Auftrag" msgid "Company address for this order" msgstr "Firmenadresse für diesen Auftrag" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "Bestell-Referenz" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "Bestellungs-Status" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "Firma bei der die Teile bestellt werden" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "Zulieferer-Referenz" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "Zulieferer Bestellreferenz" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "Empfangen von" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "Datum an dem der Auftrag fertigstellt wurde" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "Ziel-Lager" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "Teile-Zulieferer muss dem Zulieferer der Bestellung entsprechen" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "Position stimmt nicht mit Kaufauftrag überein" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "Anzahl muss eine positive Zahl sein" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Kunde" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "Firma an die die Teile verkauft werden" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "Kundenreferenz" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "Bestellreferenz" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "Versanddatum" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "Versand von" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "Bestellung ist bereits abgeschlossen" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "Bestellung ist bereits storniert" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "Nur ein offener Auftrag kann als abgeschlossen markiert werden" -#: order/models.py:1450 +#: order/models.py:1463 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:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 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:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "Anzahl" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1822 msgid "Line item reference" msgstr "Position - Referenz" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "Position - Notizen" -#: order/models.py:1822 +#: order/models.py:1844 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:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "Positionsbeschreibung (optional)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "Zusätzlicher Kontext für diese Zeile" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "Stückpreis" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "Lieferantenteil muss mit Lieferant übereinstimmen" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "Zuliefererteil" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "Empfangen" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "Empfangene Objekt-Anzahl" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Preis" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "Preis pro Einheit" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "Nur verkaufbare Teile können einem Auftrag zugewiesen werden" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Verkaufspreis" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "Stückverkaufspreis" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Versendet" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "Versendete Menge" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "Versanddatum" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "Lieferdatum" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "Versanddatum" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "Kontrolliert von" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "Benutzer, der diese Sendung kontrolliert hat" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Sendung" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "Sendungsnummer" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "Sendungsverfolgungsnummer" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "Informationen zur Sendungsverfolgung" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "Rechnungsnummer" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "Referenznummer für zugehörige Rechnung" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "Sendung wurde bereits versandt" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "Sendung hat keine zugewiesene Lagerartikel" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "Lagerartikel wurde nicht zugewiesen" -#: order/models.py:2548 +#: order/models.py:2577 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:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "Kann Lagerartikel keiner Zeile ohne Teil hinzufügen" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Die zugeordnete Anzahl darf nicht die verfügbare Anzahl überschreiten" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "Reserviermenge muss größer null sein" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Anzahl für serialisierte Lagerartikel muss 1 sein" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "Auftrag gehört nicht zu Sendung" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Sendung gehört nicht zu Auftrag" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Position" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "Sendungsnummer-Referenz" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "Position" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "Lagerartikel für Zuordnung auswählen" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "Anzahl für Bestandszuordnung eingeben" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "Rücksendungsreferenz" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "Firma von der die Artikel zurückgeschickt werden" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "Status der Rücksendung" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "Artikel zur Rücksendung auswählen" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "Empfangsdatum" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "Ergebnis" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "Ergebnis für dieses Zeilenelement" -#: order/models.py:3072 +#: order/models.py:3101 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:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Parameter kopieren" @@ -5372,216 +5416,216 @@ msgstr "Positionen" msgid "Completed Lines" msgstr "Abgeschlossene Positionen" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Lieferant" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Bestellung kann nicht verworfen werden" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Erlaube das Schließen des Auftrags mit unvollständigen Positionen" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Auftrag hat unvollständige Positionen" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Der Auftrag ist nicht offen" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Automatische Preisgestaltung" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Kaufpreis automatisch basierend auf Lieferantenbestandsdaten berechnen" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Kaufpreiswährung" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Elemente zusammenfügen" -#: order/serializers.py:689 +#: order/serializers.py:728 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:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Lieferanten-Teilenummer" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Interne Teilenummer" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Zuliefererteil muss ausgewählt werden" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Bestellung muss angegeben sein" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Lieferant muss mit der Bestellung übereinstimmen" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Die Bestellung muss mit dem Lieferant übereinstimmen" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Position" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Zielort für empfangene Teile auswählen" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Losnummer für eingehende Lagerartikel" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Ablaufdatum" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Seriennummern für eingehende Lagerartikel" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Barcode" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Gescannter Barcode" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Barcode ist bereits in Verwendung" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Positionen müssen angegeben werden" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Ziel-Lagerort muss angegeben werden" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Barcode muss eindeutig sein" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Abgeschlossene Sendungen" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Verkaufspreis-Währung" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Keine Sendungsdetails angegeben" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Position ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Anzahl muss positiv sein" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Seriennummern zum Zuweisen eingeben" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Sendung wurde bereits versandt" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Sendung ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Folgende Serienummern konnten nicht gefunden werden" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Artikel der Bestellzeile zurücksenden" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Artikel entspricht nicht der Rücksendeschrift" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Artikel wurde bereits erhalten" -#: order/serializers.py:2043 +#: order/serializers.py:2156 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:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Verkaufspreis-Währung" @@ -5797,7 +5841,7 @@ msgstr "Standard-Stichworte für Teile dieser Kategorie" msgid "Icon" msgstr "Symbol" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Symbol (optional)" @@ -5818,7 +5862,7 @@ msgstr "Standard-Wert" msgid "Default Parameter Value" msgstr "Standard Parameter Wert" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Teile" @@ -5933,7 +5977,7 @@ msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern" msgid "Part category" msgstr "Teile-Kategorie" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN (Interne Produktnummer)" @@ -5942,7 +5986,7 @@ msgstr "IPN (Interne Produktnummer)" msgid "Part revision or version number" msgstr "Revisions- oder Versionsnummer" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Version" @@ -5966,7 +6010,7 @@ msgstr "Standard Ablaufzeit" msgid "Expiry time (in days) for stock items of this part" msgstr "Ablauf-Zeit (in Tagen) für Bestand dieses Teils" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimaler Bestand" @@ -6447,355 +6491,355 @@ msgstr "Teil-Beziehung kann nicht zwischen einem Teil und sich selbst erstellt w msgid "Duplicate relationship already exists" msgstr "Doppelte Beziehung existiert bereits" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Übergeordnete Kategorie" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Übergeordnete Teilkategorie" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Unter-Kategorien" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Ergebnisse" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Anzahl der Ergebnisse, die in dieser Vorlage aufgezeichnet wurden" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Kaufwährung dieses Lagerartikels" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Originalteil" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Originalteil zum Duplizieren auswählen" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Bild kopieren" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Bild vom Originalteil kopieren" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Stückliste kopieren" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Stückliste vom Originalteil kopieren" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Parameterdaten vom Originalteil kopieren" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Anmerkungen kopieren" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Notizen aus Originalteil kopieren" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Start-Bestandsmenge" -#: part/serializers.py:448 +#: part/serializers.py:451 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:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Initialer Lagerort" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Lagerstandort für dieses Teil angeben" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Lieferant auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Hersteller auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Hersteller-Teilenummer" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "Ausgewählte Firma ist kein gültiger Lieferant" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "Ausgewählte Firma ist kein gültiger Hersteller" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Herstellerteil mit dieser MPN existiert bereits" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Lieferantenteil mit dieser SKU existiert bereits" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Kategoriename" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Im Bau" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Lagerartikel" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Gesamtbestand" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Nicht zugewiesenes Lager" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Alternatives Lager" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Teil duplizieren" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Initiale Daten von anderem Teil kopieren" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Initialer Lagerbestand" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Erstelle Teil mit Ausgangsbestand" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Lieferanteninformationen" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Lieferanteninformationen zu diesem Teil hinzufügen" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Kategorieparameter kopieren" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Parametervorlagen aus der ausgewählten Teilkategorie kopieren" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Vorhandenes Bild" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Dateiname eines vorhandenen Teilbildes" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Bilddatei existiert nicht" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Gesamte Stückliste validieren" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Herstellbar" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Niedrigster Preis" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Berechneten Wert für Mindestpreis überschreiben" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Mindestpreis Währung" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Höchster Preis" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Berechneten Wert für maximalen Preis überschreiben" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Maximalpreis Währung" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Aktualisieren" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Preis für dieses Teil aktualisieren" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, 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:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Mindestpreis darf nicht größer als der Maximalpreis sein" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Der Maximalpreis darf nicht kleiner als der Mindestpreis sein" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Teil auswählen, von dem Stückliste kopiert wird" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Bestehende Daten entfernen" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Bestehende Stücklisten-Positionen vor dem Kopieren entfernen" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Vererbtes einschließen" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Stücklisten-Positionen einbeziehen, die von Vorlage-Teilen geerbt werden" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Ungültige Zeilen überspringen" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Aktiviere diese Option, um ungültige Zeilen zu überspringen" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Ersatzteile kopieren" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Ersatzteile beim Duplizieren von Stücklisten-Positionen kopieren" @@ -7516,7 +7560,7 @@ msgstr "Rand" msgid "Print a border around each label" msgstr "Einen Rahmen um jedes Label drucken" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "Querformat" @@ -7596,64 +7640,77 @@ msgstr "Unterstützt das Scannen von TME-Barcodes" msgid "The Supplier which acts as 'TME'" msgstr "Der Lieferant, der als 'TME' fungiert" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Nur Mitarbeiter können Plugins verwalten" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "Plugin-Installation ist deaktiviert" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Plugin wurde erfolgreich installiert" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Plugin installiert in {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "Plugin wurde nicht in der Registry gefunden" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "Plugin ist kein gepacktes Plugin" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Plugin-Paketname nicht gefunden" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Nur Mitarbeiter können Plugins verwalten" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "Plugin-Deinstallation ist deaktiviert" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "Plugin kann nicht deinstalliert werden, da es momentan aktiv ist" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Plugin erfolgreich deinstallieren" @@ -7900,55 +7957,55 @@ msgstr "Installation nicht bestätigt" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Komplett neu laden" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Führe ein vollständiges Nachladen der Plugin-Registrierung durch" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Neuladen erzwingen" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 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:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Plugins sammeln" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Plugins sammeln und zur Registrierung hinzufügen" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Plugin aktivieren" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Dieses Plugin aktivieren" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Konfiguration löschen" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Plugin-Konfiguration aus der Datenbank löschen" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "Teile" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "US-Letter" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "Vorlagen Name" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "Beschreibung der Vorlage" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "Dateinamen-Muster" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Filter" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "Seitengröße für PDF-Berichte" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "Bericht in Querformat anzeigen" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Breite [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "Label-Breite in mm" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Höhe [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "Label-Höhe in mm" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "Schnipsel" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "Berichts-Snippet" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "Snippet-Beschreibung" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "Ressource" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "Berichts-Ressource" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "Ressource-Beschreibung" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "Etiketten-Vorlage auswählen" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "Lagerartikel Test-Bericht" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Verbaute Objekte" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "part_image tag benötigt eine Bauteilinstanz" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "company_image tag erfordert eine Firmeninstanz" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "Unterorte in gefilterte Ergebnisse einbeziehen" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Übergeordneter Ort" @@ -8388,7 +8449,7 @@ msgstr "Gültigkeitsdauer vor" msgid "Expiry date after" msgstr "Gültigkeitsdauer nach" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "überfällig" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "Lagerartikel können nicht in strukturelle Lagerorte abgelegt werden!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Für virtuelle Teile können keine Lagerartikel erstellt werden" @@ -8567,7 +8628,7 @@ msgstr "Passendes Zuliefererteil für diesen Lagerartikel auswählen" msgid "Where is this stock item located?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Verpackung, in der dieser Lagerartikel gelagert ist" @@ -8583,7 +8644,7 @@ msgstr "Ist dieses Teil in einem anderen verbaut?" msgid "Serial number for this item" msgstr "Seriennummer für dieses Teil" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Losnummer für diesen Lagerartikel" @@ -8696,7 +8757,7 @@ msgstr "Lagerartikel wird aktuell produziert" msgid "Serialized stock cannot be merged" msgstr "Nachverfolgbare Lagerartikel können nicht zusammengeführt werden" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Artikel duplizeren" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "Testvorlage für dieses Ergebnis" @@ -8844,222 +8905,222 @@ msgstr "Elternposition" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 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:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Seriennummern für neue Teile eingeben" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "abgelaufen" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Untergeordnete Objekte" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "Einkaufspreis dieses Lagerartikels, pro Einheit oder Verpackungseinheit" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Anzahl der zu serialisierenden Lagerartikel eingeben" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, 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:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Ziel-Bestand" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Seriennummern können diesem Teil nicht zugewiesen werden" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Seriennummern existieren bereits" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Lagerartikel für Installation auswählen" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Zu installierende Menge" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Anzahl der zu verwendenden Artikel eingeben" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr " Transaktionsnotizen hinzufügen (optional)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "Die zu verwendende Menge muss mindestens 1 sein" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Lagerartikel ist nicht verfügbar" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Ausgewähltes Teil ist nicht in der Stückliste" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "Die zu verwendende Menge darf die verfügbare Menge nicht überschreiten" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Ziel Lagerort für unverbautes Objekt" -#: stock/serializers.py:942 +#: stock/serializers.py:956 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:955 +#: stock/serializers.py:969 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:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Lagerartikel konnte nicht mit Zulieferteil zugewiesen werden" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Lagerartikel Status-Code" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Lagerartikel auswählen, um den Status zu ändern" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Keine Lagerartikel ausgewählt" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Unter-Lagerorte" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Übergeordneter Lagerort" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Teil muss verkaufbar sein" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Artikel ist einem Kundenauftrag zugeordnet" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Artikel ist einem Fertigungsauftrag zugeordnet" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Kunde zum Zuweisen von Lagerartikel" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "Ausgewählte Firma ist kein Kunde" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Notizen zur Lagerzuordnung" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Eine Liste der Lagerbestände muss angegeben werden" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Notizen zur Lagerartikelzusammenführung" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Unterschiedliche Lieferanten erlauben" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Lieferanten erlauben" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Unterschiedliche Status erlauben" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Status-Codes erlauben" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Mindestens zwei Lagerartikel müssen angegeben werden" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Keine Änderung" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Primärschlüssel Lagerelement" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Bestandsbewegungsnotizen" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "Nächste Seriennummer" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "Vorherige Seriennummer" @@ -9541,83 +9602,99 @@ msgstr "Aufträge" msgid "Return Orders" msgstr "Rücksendeaufträge" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Benutzername" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Vorname" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Vorname des Benutzers" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Nachname" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Nachname des Benutzers" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "E-Mailadresse des Benutzers" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Mitarbeiter" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Hat der Benutzer die Mitarbeiter Berechtigung" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Administrator" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Ist dieser Benutzer ein Administrator" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Ist dieses Benutzerkonto aktiv" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "Passwort" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Ihr Konto wurde erstellt." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Bitte benutzen Sie die Passwort-zurücksetzen-Funktion, um sich anzumelden" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Willkommen bei InvenTree" diff --git a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po index a606e0ec9d..7232c7d613 100644 --- a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -49,7 +49,7 @@ msgstr "Δεν δόθηκαν δεδομένα" msgid "This field must be unique." msgstr "Αυτό το πεδίο πρέπει να είναι μοναδικό." -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Δεν έχετε δικαιώματα να το δείτε αυτό" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Δεν ήταν δυνατή η μετατροπή από {original} σε {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Μη έγκυρη ποσότητα" @@ -104,13 +104,13 @@ msgstr "Εισάγετε ημερομηνία" msgid "Invalid decimal value" msgstr "Μη έγκυρη δεκαδική τιμή" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Σημειώσεις" @@ -123,75 +123,91 @@ msgstr "Η τιμή '{name}' δεν εμφανίζεται σε μορφή μο msgid "Provided value does not match required pattern: " msgstr "Η παρεχόμενη τιμή δεν ταιριάζει με το απαιτούμενο απαραραίητη μοτίβο: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Δεν είναι δυνατή η σειριοποίηση περισσότερων από 1000 Προϊόντων ταυτόχρονα" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Κενό σειριακό αριθμό συμβολοσειράς" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Διπλότυπο ArialTTumblr" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Μη έγκυρη ομάδα: {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Το εύρος της ομάδας {group} υπερβαίνει την επιτρεπόμενη ποσότητα ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Δεν βρέθηκαν σειριακοί αριθμοί" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Ο αριθμός μοναδικών σειριακών αριθμών ({n}) πρέπει να αντιστοιχεί στην ποσότητα ({q})" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Αφαιρέστε τα HTML tags από την τιμή που εισάγατε" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "Τα δεδομένα περιέχουν απαγορευμένο περιεχόμενο markdown" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Σφάλμα σύνδεσης" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Ο διακομιστής απάντησε με μη έγκυρο κωδικό κατάστασης" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Προέκυψε σφάλμα" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Ο διακομιστής ανταποκρίθηκε με \"Invalid Content-Length value\"" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Η εικόνα είναι πολύ μεγάλη σε μέγεθος" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Η λήψη εικόνας ξεπέρασε το μέγιστο μέγεθος" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Ο διακομιστής επέστρεψε σφάλμα %1$d %2$s" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Το URL δεν είναι έγκυρο αρχείο εικόνας" @@ -199,7 +215,7 @@ msgstr "Το URL δεν είναι έγκυρο αρχείο εικόνας" msgid "Log in to the app" msgstr "Σύνδεση στην εφαρμογή" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Email" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Μη έγκυρη επιλογή" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Όνομα" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Περιγραφή" msgid "Description (optional)" msgstr "Περιγραφή (προαιρετική)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Μονοπάτι" @@ -320,51 +336,51 @@ msgstr "Ένα σφάλμα έχει καταγραφεί από το διακο msgid "Image" msgstr "Εικόνα" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Πρέπει να είναι αριθμός" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Νόμισμα" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Επιλέξτε νόμισμα από τις διαθέσιμες επιλογές" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Μη έγκυρη τιμή" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Απομακρυσμένες Εικόνες" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "Διεύθυνση URL του αρχείου απομακρυσμένης εικόνας" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Η λήψη εικόνων από απομακρυσμένο URL δεν είναι ενεργοποιημένη" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Αποτυχία λήψης εικόνας από απομακρυσμένο URL" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "Κινέζικα (απλοποιημένα)" msgid "Chinese (Traditional)" msgstr "Κινέζικα (Παραδοσιακά)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Διαθέσιμη ενημέρωση" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "Μια ενημέρωση για το InvenTree είναι διαθέσιμη" @@ -536,7 +552,7 @@ msgstr "Μη έγκυρη φυσική μονάδα" msgid "Not a valid currency code" msgstr "Μη έγκυρος κωδικός συναλλάγματος" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Κατάσταση παραγγελίας" @@ -545,21 +561,21 @@ msgstr "Κατάσταση παραγγελίας" msgid "Parent Build" msgstr "Γονική Κατασκευή" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Συμπερίληψη παραλλαγών" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "Συμπερίληψη παραλλαγών" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "Συμπερίληψη παραλλαγών" msgid "Part" msgstr "Εξάρτημα" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Κατηγορία" @@ -653,16 +669,16 @@ msgstr "Εξαίρεση δέντρου" msgid "Build must be cancelled before it can be deleted" msgstr "Η έκδοση πρέπει να ακυρωθεί πριν διαγραφεί" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Αναλώσιμο" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Προαιρετικό" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Συναρμολόγηση" @@ -671,32 +687,32 @@ msgstr "Συναρμολόγηση" msgid "Tracked" msgstr "Υπό παρακολούθηση" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Υπό δοκιμή" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Εκκρεμής παραγγελία" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Κατανεμημένο" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Καταναλωμένο" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Διαθέσιμο" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Σε παραγγελία" @@ -704,26 +720,26 @@ msgstr "Σε παραγγελία" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Σειρά Κατασκευής" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Τοποθεσία" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Έξοδος" @@ -767,8 +783,8 @@ msgstr "Η ημερομηνία στόχος πρέπει να είναι μετ msgid "Build Order Reference" msgstr "Αναφορά Παραγγελίας Κατασκευής" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Κωδικός Παραγγελίας Πωλήσεων" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Τοποθεσία Προέλευσης" @@ -845,16 +861,16 @@ msgstr "Κατάσταση Κατασκευής" msgid "Build status code" msgstr "Κωδικός κατάστασης κατασκευής" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Κωδικός Παρτίδας" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Κωδικός παρτίδας για αυτήν την κατασκευή" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Ημερομηνία Δημιουργίας" @@ -875,7 +891,7 @@ msgstr "Ημερομηνία ολοκλήρωσης στόχου" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Ημερομηνία ολοκλήρωσης της κατασκευής. Η κατασκευή θα καθυστερήσει μετά από αυτή την ημερομηνία." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Ημερομηνία ολοκλήρωσης" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Προτεραιότητα αυτής της εντολής κατασκευής" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Κωδικός Έργου" @@ -948,7 +964,7 @@ msgstr "Η παραγγελία κατασκευής {build} έχει ολοκλ msgid "A build order has been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Πρέπει να δοθούν σειριακοί αριθμοί για τα ανιχνεύσιμα Προϊόντα" @@ -964,23 +980,23 @@ msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθ msgid "Build output does not match Build Order" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Η ποσότητα δεν μπορεί να είναι μεγαλύτερη από την παραγόμενη ποσότητα" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "Η έξοδος κατασκευής δεν έχει περάσει όλες τις απαιτούμενες δοκιμές" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Το προϊόν κατασκευής {serial} δεν έχει περάσει όλες τις απαιτούμενες δοκιμές" @@ -1001,10 +1017,10 @@ msgstr "Γραμμή εντολής κατασκευής" msgid "Build object" msgstr "Αντικείμενο κατασκευής" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Αντικείμενο κατασκευής" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "Η ποσότητα πρέπει να είναι 1 για σειριακ msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Η καταχωρημένη ποσότητα ({q}) δεν πρέπει να υπερβαίνει τη διαθέσιμη ποσότητα αποθέματος ({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "Στοιχείο αποθέματος είναι υπερ-κατανεμημένο" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Στοιχείο Αποθέματος" @@ -1083,378 +1099,378 @@ msgstr "Αποθήκη προορισμού" msgid "Build Level" msgstr "Επίπεδο κατασκευής" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Όνομα Προϊόντος" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Κατασκευή Εξόδου" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Το εξερχόμενο μέρος δεν ταιριάζει με το μέρος BuildOrder" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Αυτή η έξοδος κατασκευής δεν έχει εκχωρηθεί πλήρως" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται για ανιχνεύσιμα μέρη" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται, καθώς ο λογαριασμός των υλικών περιέχει ανιχνεύσιμα μέρη" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Σειριακοί αριθμοί" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Τοποθεσία αποθέματος για την έξοδο κατασκευής" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Αυτόματη Κατανομή Σειριακών Αριθμών" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Αυτόματη κατανομή των απαιτούμενων στοιχείων με τους αντίστοιχους σειριακούς αριθμούς" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Οι παρακάτω σειριακοί αριθμοί υπάρχουν ήδη ή δεν είναι έγκυροι" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Πρέπει να παρέχεται μια λίστα με τα αποτελέσματα κατασκευής" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Θέση αποθέματος για απορριφθείσες παραγωγές" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Απόρριψη Κατανομών" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Απορρίψτε τυχόν κατανομές αποθέματος για παραγωγές που έχουν απορριφθεί" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Αιτία απόρριψης προϊόντων κατασκευής" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Τοποθεσία για ολοκληρωμένα προϊόντα κατασκευής" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Αποδοχή Ελλιπούς Δέσμευσης" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Ολοκλήρωσε τα προϊόντα εάν το απόθεμα δεν έχει δεσμευτεί πλήρως" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Κατανάλωση δεσμευμένου αποθέματος" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Κατανάλωση οποιουδήποτε αποθέματος έχει ήδη δεσμευτεί για αυτή την κατασκευή" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Αφαίρεση Ατελείωτων Προϊόντων" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Διαγράψτε τυχόν προϊόντα κατασκευής που δεν έχουν ολοκληρωθεί" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Δεν επιτρέπεται" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Αποδοχή ως κατανάλωση για αυτή την παραγγελία κατασκευής" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Αποδέσμευση πριν από την ολοκλήρωση αυτής της παραγγελίας κατασκευής" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Υπερ-δεσμευμένο Απόθεμα" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Πώς θέλετε να χειριστείτε το επιπλέον απόθεμα που έχει δεσμευτεί στην παραγγελία κατασκευής" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Μερικά στοιχεία αποθέματος έχουν υπερ-δεσμευτεί" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Αποδοχή Μη Δεσμευμένων" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Αποδεχτείτε ότι αντικείμενα αποθέματος δεν έχουν δεσμευτεί πλήρως σε αυτή την παραγγελία κατασκευής" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Το απαιτούμενο απόθεμα δεν έχει δεσμευτεί πλήρως" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Αποδοχή Μη Ολοκληρωμένων" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Αποδεχτείτε ότι ο απαιτούμενος αριθμός προϊόντων κατασκευής δεν έχει ολοκληρωθεί" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Ο απαιτούμενος αριθμός προϊόντων δεν έχει ολοκληρωθεί" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "Η εντολή κατασκευής έχει ανοιχτές θυγατρικές εντολές κατασκευής" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Η εντολή κατασκευής πρέπει να βρίσκεται σε κατάσταση παραγωγής" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Η παραγγελία κατασκευής έχει ελλιπή προϊόντα" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Γραμμή Κατασκευής" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Προϊόν Κατασκευής" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Το προϊόν κατασκευής πρέπει να δείχνει στην ίδια κατασκευή" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Αντικείμενο Γραμμής Κατασκευής" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part πρέπει να δείχνει στο ίδιο εξάρτημα με τη εντολή κατασκευής" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Το στοιχείο πρέπει να υπάρχει στο απόθεμα" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Η διαθέσιμη ποσότητα ({q}) έχει ξεπεραστεί" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Πρέπει να καθοριστεί έξοδος κατασκευής για την κατανομή ανιχνεύσιμων Προϊόντων" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Δεν μπορεί να καθοριστεί έξοδος κατασκευής για την κατανομή μη ανιχνεύσιμων Προϊόντων" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Πρέπει να δοθούν στοιχεία κατανομής" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Τοποθεσία αποθέματος από την οποία θα ληφθούν τα Προϊόντα (αφήστε κενό για λήψη από οποιαδήποτε τοποθεσία)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Εξαίρεση τοποθεσίας" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Εξαιρέστε στοιχεία αποθέματος από αυτή την επιλεγμένη τοποθεσία" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Εναλλάξιμο απόθεμα" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Στοιχεία αποθέματος σε πολλές τοποθεσίες μπορούν να χρησιμοποιηθούν εναλλάξ" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Εναλλακτικό απόθεμα" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Να επιτρέπεται η κατανομή εναλλακτικών Προϊόντων" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Προαιρετικά στοιχεία" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Κατανομή προαιρετικών στοιχείων BOM στην εντολή κατασκευής" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Αναφορά BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "ID Προϊόντος BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Όνομα Προϊόντος BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Κατασκευή" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Aντικειμένου προμηθευτή" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Δεσμευμένη ποσότητα" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Αναφορά κατασκευής" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Όνομα κατηγορίας Προϊόντος" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Ανιχνεύσιμο" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Κληρονομημένο" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Να επιτρέπονται παραλλαγές" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Στοιχείο BOM" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "Σε παραγωγή" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Προγραμματισμένο για κατασκευή" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Εξωτερικό απόθεμα" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Διαθέσιμο απόθεμα" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Διαθέσιμο εναλλακτικό απόθεμα" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Διαθέσιμο απόθεμα παραλλαγών" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "Η καταναλωμένη ποσότητα υπερβαίνει τη δεσμευμένη ποσότητα" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "Προαιρετικές σημειώσεις για την κατανάλωση αποθέματος" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "Το στοιχείο κατασκευής πρέπει να αντιστοιχεί στη σωστή εντολή κατασκευής" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "Διπλή κατανομή στοιχείου κατασκευής" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "Η γραμμή κατασκευής πρέπει να αντιστοιχεί στη σωστή εντολή κατασκευής" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "Διπλή κατανομή γραμμής κατασκευής" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "Πρέπει να δοθεί τουλάχιστον ένα στοιχείο ή μία γραμμή" @@ -1478,7 +1494,7 @@ msgstr "Σε αναμονή" msgid "Cancelled" msgstr "Ακυρώθηκε" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "Εκπρόθεσμη εντολή κατασκευής" msgid "Build order {bo} is now overdue" msgstr "Η εντολή κατασκευής {bo} είναι πλέον εκπρόθεσμη" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "Είναι σύνδεσμος" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "Είναι αρχείο" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "Ο χρήστης δεν έχει δικαίωμα να διαγράψει αυτά τα συνημμένα" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Ο χρήστης δεν έχει δικαίωμα να διαγράψει αυτό το συνημμένο" @@ -1534,11 +1550,11 @@ msgstr "Δεν δόθηκαν έγκυροι κωδικοί συναλλάγμα msgid "No plugin" msgstr "Χωρίς πρόσθετο" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Ετικέτα κωδικού έργου" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Ενημερώθηκε" @@ -1600,7 +1616,7 @@ msgstr "Η συμβολοσειρά κλειδιού πρέπει να είνα #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Χρήστης" msgid "Price break quantity" msgstr "Ποσότητα κλιμακωτής τιμής" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Τιμή" @@ -1633,10 +1649,10 @@ msgstr "Το endpoint στο οποίο λαμβάνεται αυτό το webho msgid "Name for this webhook" msgstr "Όνομα για αυτό το webhook" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Ενεργό" @@ -1660,11 +1676,11 @@ msgstr "Μυστικό" msgid "Shared secret for HMAC" msgstr "Κοινόχρηστο μυστικό για HMAC" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "ID μηνύματος" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "Μοναδικό αναγνωριστικό για αυτό το μήνυμα" @@ -1714,7 +1730,7 @@ msgstr "Τίτλος" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Συντάκτης" msgid "Summary" msgstr "Περίληψη" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Αναγνωσμένο" @@ -1797,7 +1813,7 @@ msgstr "Το αρχείο λείπει" msgid "Missing external link" msgstr "Λείπει ο εξωτερικός σύνδεσμος" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "Τύπος μοντέλου" @@ -1833,7 +1849,7 @@ msgstr "Μέγεθος αρχείου" msgid "File size in bytes" msgstr "Μέγεθος αρχείου σε bytes" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Μη έγκυρος τύπος μοντέλου που ορίστηκε για το συνημμένο" @@ -1861,7 +1877,7 @@ msgstr "Λογικό κλειδί" msgid "State logical key that is equal to this custom state in business logic" msgstr "Λογικό κλειδί κατάστασης που είναι ισοδύναμο με αυτή την προσαρμοσμένη κατάσταση στη λογική της εφαρμογής" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Τιμή" @@ -1874,7 +1890,7 @@ msgstr "Αριθμητική τιμή που θα αποθηκευτεί στη msgid "Name of the state" msgstr "Όνομα της κατάστασης" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Ετικέτα" @@ -1930,7 +1946,7 @@ msgstr "Το λογικό κλειδί πρέπει να ανήκει στα λ msgid "Name must be different from the names of the reference status" msgstr "Το όνομα πρέπει να είναι διαφορετικό από τα ονόματα της κατάστασης αναφοράς" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "Λίστα επιλογών" @@ -1982,7 +1998,7 @@ msgstr "Προεπιλεγμένη καταχώρηση" msgid "Default entry for this selection list" msgstr "Προεπιλεγμένη καταχώρηση για αυτή τη λίστα επιλογών" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Δημιουργήθηκε" @@ -1998,334 +2014,334 @@ msgstr "Τελευταία ενημέρωση" msgid "Date and time that the selection list was last updated" msgstr "Ημερομηνία και ώρα της τελευταίας ενημέρωσης της λίστας επιλογών" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "Καταχώρηση λίστας επιλογών" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "Καταχωρήσεις λίστας επιλογών" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "Λίστα επιλογών στην οποία ανήκει αυτή η καταχώρηση" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "Τιμή της καταχώρησης λίστας επιλογών" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "Ετικέτα για την καταχώρηση λίστας επιλογών" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "Περιγραφή της καταχώρησης λίστας επιλογών" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "Είναι ενεργή αυτή η καταχώρηση λίστας επιλογών;" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "Πρότυπο παραμέτρου" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "Οι παράμετροι τύπου checkbox δεν μπορούν να έχουν μονάδες" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "Οι παράμετροι τύπου checkbox δεν μπορούν να έχουν επιλογές" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "Οι επιλογές πρέπει να είναι μοναδικές" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "Το όνομα προτύπου παραμέτρου πρέπει να είναι μοναδικό" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "Όνομα παραμέτρου" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "Μονάδες" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "Φυσικές μονάδες για αυτή την παράμετρο" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "Περιγραφή παραμέτρου" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "Checkbox" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "Είναι αυτή η παράμετρος τύπου checkbox;" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "Επιλογές" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "Έγκυρες επιλογές για αυτή την παράμετρο (διαχωρισμένες με κόμμα)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "Λίστα επιλογών για αυτή την παράμετρο" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Ενεργό" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "Μη έγκυρη επιλογή για την τιμή παραμέτρου" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Πρότυπο" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Δεδομένα" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "Τιμή παραμέτρου" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Σημείωση" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Προαιρετικό πεδίο σημείωσης" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "Σάρωση barcode" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "Δεδομένα barcode" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "Χρήστης που σάρωσε το barcode" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "Χρονική σήμανση" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "Ημερομηνία και ώρα της σάρωσης barcode" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "URL endpoint που επεξεργάστηκε το barcode" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "Πλαίσιο" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "Δεδομένα πλαισίου για τη σάρωση barcode" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "Απόκριση" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "Δεδομένα απόκρισης από τη σάρωση barcode" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Αποτέλεσμα" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "Ήταν επιτυχημένη η σάρωση barcode;" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "Παρουσιάστηκε σφάλμα" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: Η διαγραφή του log email προστατεύεται. Ορίστε το INVENTREE_PROTECT_EMAIL_LOG σε False για να επιτραπεί η διαγραφή." -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "Μήνυμα email" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "Μηνύματα email" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "Ανακοινώθηκε" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "Εστάλη" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "Απέτυχε" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "Παραδόθηκε" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "Επιβεβαιώθηκε" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "Εισερχόμενο" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "Εξερχόμενο" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "Χωρίς απάντηση" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "Παρακολούθηση παράδοσης" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "Παρακολούθηση ανάγνωσης" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "Παρακολούθηση κλικ" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "Global ID" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "Αναγνωριστικό για αυτό το μήνυμα (ενδέχεται να παρέχεται από εξωτερικό σύστημα)" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "ID νήματος" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Αναγνωριστικό για αυτό το νήμα μηνυμάτων (ενδέχεται να παρέχεται από εξωτερικό σύστημα)" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "Νήμα" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "Συνδεδεμένο νήμα για αυτό το μήνυμα" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "Νήμα email" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "Νήματα email" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Κλειδί" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "Μοναδικό κλειδί για αυτό το νήμα (χρησιμοποιείται για την ταυτοποίησή του)" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "Μοναδικό αναγνωριστικό για αυτό το νήμα" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "Ξεκίνησε εσωτερικά" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "Ξεκίνησε αυτό το νήμα εσωτερικά;" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "Ημερομηνία και ώρα δημιουργίας του νήματος" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "Ημερομηνία και ώρα της τελευταίας ενημέρωσης του νήματος" @@ -2375,1243 +2391,1259 @@ msgstr "Δείχνει αν η ρύθμιση παρακάμπτεται από msgid "Override" msgstr "Παράκαμψη" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Εκτελείται" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Εργασίες σε αναμονή" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Προγραμματισμένες εργασίες" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Αποτυχημένες εργασίες" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "ID εργασίας" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Μοναδικό ID εργασίας" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Κλείδωμα" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Χρόνος κλειδώματος" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Όνομα εργασίας" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Συνάρτηση" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Όνομα συνάρτησης" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Ορίσματα" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Ορίσματα εργασίας" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Ορίσματα λέξεων-κλειδιών" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Ορίσματα λέξεων-κλειδιών της εργασίας" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Όνομα αρχείου" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Τύπος μοντέλου" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Ο χρήστης δεν έχει δικαίωμα να δημιουργήσει ή να επεξεργαστεί συνημμένα για αυτό το μοντέλο" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Η λίστα επιλογών είναι κλειδωμένη" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Χωρίς ομάδα" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "Το URL του site είναι κλειδωμένο από τη ρύθμιση" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Απαιτείται επανεκκίνηση" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Μια ρύθμιση έχει αλλάξει και απαιτείται επανεκκίνηση του διακομιστή" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Εκκρεμείς migrations" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Αριθμός εκκρεμών μεταναστεύσεων βάσης δεδομένων" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Ενεργοί κωδικοί προειδοποίησης" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "Λεξικό με τους ενεργούς κωδικούς προειδοποίησης" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "ID instance" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Μοναδικό αναγνωριστικό για αυτό το instance του InvenTree" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "Δημοσίευση ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Δημοσίευση του instance ID του διακομιστή στις πληροφορίες κατάστασης διακομιστή (χωρίς έλεγχο ταυτότητας)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Όνομα instance διακομιστή" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Περιγραφή κειμένου για το instance του διακομιστή" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Χρήση ονόματος instance" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Χρήση του ονόματος instance στη γραμμή τίτλου" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Περιορισμός εμφάνισης `about`" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Εμφάνιση της λειτουργίας `about` μόνο σε superusers" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Επωνυμία εταιρείας" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "Εσωτερική επωνυμία εταιρείας" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "Βασικό URL" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "Βασικό URL για το instance του διακομιστή" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Προεπιλεγμένο νόμισμα" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "Επιλέξτε βασικό νόμισμα για τους υπολογισμούς τιμών" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "Υποστηριζόμενα νομίσματα" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "Λίστα υποστηριζόμενων κωδικών νομισμάτων" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "Διάστημα ενημέρωσης νομισμάτων" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Κάθε πότε θα ενημερώνονται οι συναλλαγματικές ισοτιμίες (0 για απενεργοποίηση)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "ημέρες" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "Πρόσθετο ενημέρωσης νομισμάτων" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "Πρόσθετο ενημέρωσης νομισμάτων που θα χρησιμοποιηθεί" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "Λήψη από URL" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "Να επιτρέπεται η λήψη απομακρυσμένων εικόνων και αρχείων από εξωτερικό URL" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "Όριο μεγέθους λήψης" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "Μέγιστο επιτρεπόμενο μέγεθος λήψης για απομακρυσμένη εικόνα" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "User-agent που χρησιμοποιείται για λήψη από URL" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Να επιτρέπεται η αντικατάσταση του user-agent που χρησιμοποιείται για λήψη εικόνων και αρχείων από εξωτερικό URL (αφήστε κενό για το προεπιλεγμένο)" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "Αυστηρή επικύρωση URL" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "Να απαιτείται ορισμός σχήματος κατά την επικύρωση URL" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "Διάστημα ελέγχου ενημερώσεων" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "Κάθε πότε θα γίνεται έλεγχος για ενημερώσεις (0 για απενεργοποίηση)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Αυτόματο αντίγραφο ασφαλείας" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "Ενεργοποίηση αυτόματου backup της βάσης δεδομένων και των media αρχείων" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "Διάστημα αυτόματου backup" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "Ορίστε τον αριθμό ημερών μεταξύ των αυτόματων backup" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "Διάστημα διαγραφής εργασιών" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "Τα αποτελέσματα εργασιών παρασκηνίου θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "Διάστημα διαγραφής log σφαλμάτων" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "Τα log σφαλμάτων θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "Διάστημα διαγραφής ειδοποιήσεων" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "Οι ειδοποιήσεις χρηστών θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "Διάστημα διαγραφής email" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "Τα μηνύματα email θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "Προστασία log email" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "Αποτροπή διαγραφής εγγραφών log email" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Υποστήριξη barcode" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "Ενεργοποίηση υποστήριξης σαρωτή barcode στο web interface" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "Αποθήκευση αποτελεσμάτων barcode" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "Αποθήκευση των αποτελεσμάτων σάρωσης barcode στη βάση δεδομένων" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "Μέγιστος αριθμός σαρώσεων barcode" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "Μέγιστος αριθμός αποτελεσμάτων σάρωσης barcode που θα αποθηκεύονται" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "Καθυστέρηση εισόδου barcode" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "Χρόνος καθυστέρησης επεξεργασίας εισόδου barcode" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "Υποστήριξη barcode μέσω webcam" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "Να επιτρέπεται σάρωση barcode μέσω webcam στο πρόγραμμα περιήγησης" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "Εμφάνιση δεδομένων barcode" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "Εμφάνιση των δεδομένων barcode στο πρόγραμμα περιήγησης ως κείμενο" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "Πρόσθετο δημιουργίας barcode" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "Πρόσθετο που θα χρησιμοποιείται για εσωτερική δημιουργία δεδομένων barcode" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "Εκδόσεις Προϊόντων" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "Ενεργοποίηση πεδίου έκδοσης για Aντικειμένου" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "Μόνο εκδόσεις συναρμολογήσεων" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "Να επιτρέπονται εκδόσεις μόνο για Προϊόντα συναρμολόγησης" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "Να επιτρέπεται διαγραφή από συναρμολόγηση" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "Να επιτρέπεται η διαγραφή Προϊόντων που χρησιμοποιούνται σε συναρμολόγηση" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "Πρότυπο regular expression για αντιστοίχιση IPN Προϊόντος" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "Να επιτρέπονται διπλά IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "Να επιτρέπεται σε πολλαπλά Προϊόντα να μοιράζονται το ίδιο IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "Να επιτρέπεται η επεξεργασία IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "Να επιτρέπεται η αλλαγή της τιμής IPN κατά την επεξεργασία ενός Προϊόντος" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "Αντιγραφή δεδομένων BOM Προϊόντος" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "Αντιγραφή δεδομένων BOM από προεπιλογή κατά τον διπλασιασμό ενός Προϊόντος" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "Αντιγραφή δεδομένων παραμέτρων Προϊόντος" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "Αντιγραφή δεδομένων παραμέτρων από προεπιλογή κατά τον διπλασιασμό ενός Προϊόντος" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "Αντιγραφή δεδομένων δοκιμών Προϊόντος" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "Αντιγραφή δεδομένων δοκιμών από προεπιλογή κατά τον διπλασιασμό ενός Προϊόντος" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "Αντιγραφή προτύπων παραμέτρων κατηγορίας" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "Αντιγραφή προτύπων παραμέτρων κατηγορίας κατά τη δημιουργία Προϊόντος" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "Τα Προϊόντα είναι πρότυπα από προεπιλογή" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "Τα Προϊόντα μπορούν να συναρμολογούνται από άλλα συστατικά από προεπιλογή" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Συστατικό" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "Τα Προϊόντα μπορούν να χρησιμοποιούνται ως υποσυστατικά από προεπιλογή" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Αγοράσιμο" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "Τα Προϊόντα είναι αγοράσιμα από προεπιλογή" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Πωλήσιμο" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "Τα Προϊόντα είναι πωλήσιμα από προεπιλογή" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "Τα Προϊόντα είναι ανιχνεύσιμα από προεπιλογή" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Εικονικό" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "Τα Προϊόντα είναι εικονικά από προεπιλογή" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "Εμφάνιση σχετικών Προϊόντων" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "Εμφάνιση σχετικών Προϊόντων για ένα Aντικειμένου" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "Αρχικά δεδομένα αποθέματος" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "Να επιτρέπεται η δημιουργία αρχικού αποθέματος κατά την προσθήκη νέου Προϊόντος" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "Αρχικά δεδομένα προμηθευτή" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Να επιτρέπεται η δημιουργία αρχικών δεδομένων προμηθευτή κατά την προσθήκη νέου Προϊόντος" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "Μορφή εμφάνισης ονόματος Προϊόντος" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "Μορφή με την οποία εμφανίζεται το όνομα του Προϊόντος" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "Προεπιλεγμένο εικονίδιο κατηγορίας Προϊόντος" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "Προεπιλεγμένο εικονίδιο κατηγορίας Προϊόντος (κενό σημαίνει χωρίς εικονίδιο)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "Ελάχιστα δεκαδικά ψηφία τιμολόγησης" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Ελάχιστος αριθμός δεκαδικών ψηφίων που θα εμφανίζονται στα δεδομένα τιμολόγησης" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "Μέγιστα δεκαδικά ψηφία τιμολόγησης" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Μέγιστος αριθμός δεκαδικών ψηφίων που θα εμφανίζονται στα δεδομένα τιμολόγησης" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "Χρήση τιμών προμηθευτή" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Συμπερίληψη κλιμακωτών τιμών προμηθευτή στους συνολικούς υπολογισμούς τιμών" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "Υπέρβαση μέσω ιστορικού αγορών" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Οι ιστορικές τιμές εντολών αγοράς υπερισχύουν των κλιμακωτών τιμών προμηθευτή" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "Χρήση τιμολόγησης στοιχείου αποθέματος" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Χρήση τιμών από χειροκίνητα καταχωρημένα δεδομένα αποθέματος για τους υπολογισμούς τιμών" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "Ηλικία τιμολόγησης στοιχείου αποθέματος" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Εξαίρεση στοιχείων αποθέματος παλαιότερων από αυτόν τον αριθμό ημερών από τους υπολογισμούς τιμών" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "Χρήση τιμολόγησης παραλλαγών" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "Συμπερίληψη τιμών παραλλαγών στους συνολικούς υπολογισμούς τιμών" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "Μόνο ενεργές παραλλαγές" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "Χρήση μόνο ενεργών Προϊόντων παραλλαγών για τον υπολογισμό τιμών παραλλαγών" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "Αυτόματη ενημέρωση τιμών" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "Αυτόματη ενημέρωση τιμών Προϊόντων όταν αλλάζουν τα εσωτερικά δεδομένα" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "Διάστημα επαναυπολογισμού τιμών" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "Αριθμός ημερών πριν ενημερωθούν αυτόματα οι τιμές των Προϊόντων" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Εσωτερικές τιμές" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "Ενεργοποίηση εσωτερικών τιμών για Προϊόντα" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "Υπέρβαση μέσω εσωτερικής τιμής" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "Όταν υπάρχουν, οι εσωτερικές τιμές υπερισχύουν των υπολογισμών εύρους τιμών" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "Ενεργοποίηση εκτύπωσης ετικετών" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "Ενεργοποίηση εκτύπωσης ετικετών από το web interface" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "DPI εικόνας ετικέτας" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Ανάλυση DPI κατά τη δημιουργία αρχείων εικόνας για πρόσθετα εκτύπωσης ετικετών" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Ενεργοποίηση αναφορών" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "Ενεργοποίηση δημιουργίας αναφορών" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "Λειτουργία αποσφαλμάτωσης" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "Δημιουργία αναφορών σε λειτουργία αποσφαλμάτωσης (έξοδος HTML)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "Καταγραφή σφαλμάτων αναφορών" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "Καταγραφή σφαλμάτων που προκύπτουν κατά τη δημιουργία αναφορών" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Μέγεθος σελίδας" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "Προεπιλεγμένο μέγεθος σελίδας για PDF αναφορές" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "Επιβολή μονάδων παραμέτρων" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "Αν δοθούν μονάδες, οι τιμές των παραμέτρων πρέπει να αντιστοιχούν στις καθορισμένες μονάδες" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "Καθολικά μοναδικοί σειριακοί αριθμοί" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "Οι σειριακοί αριθμοί των στοιχείων αποθέματος πρέπει να είναι καθολικά μοναδικοί" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "Διαγραφή εξαντλημένου αποθέματος" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "Καθορίζει την προεπιλεγμένη συμπεριφορά όταν ένα στοιχείο αποθέματος εξαντλείται" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "Πρότυπο κωδικού παρτίδας" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "Πρότυπο για τη δημιουργία προεπιλεγμένων κωδικών παρτίδας για στοιχεία αποθέματος" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "Λήξη αποθέματος" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "Ενεργοποίηση λειτουργίας λήξης αποθέματος" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "Πώληση ληγμένου αποθέματος" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "Να επιτρέπεται η πώληση ληγμένου αποθέματος" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "Χρόνος απαρχαίωσης αποθέματος" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "Αριθμός ημερών που τα στοιχεία αποθέματος θεωρούνται παλαιωμένα πριν λήξουν" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "Κατασκευή με ληγμένο απόθεμα" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "Να επιτρέπεται η κατασκευή με ληγμένο απόθεμα" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "Έλεγχος ιδιοκτησίας αποθέματος" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "Ενεργοποίηση ελέγχου ιδιοκτησίας σε τοποθεσίες και στοιχεία αποθέματος" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "Προεπιλεγμένο εικονίδιο τοποθεσίας αποθέματος" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "Προεπιλεγμένο εικονίδιο τοποθεσίας αποθέματος (κενό σημαίνει χωρίς εικονίδιο)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "Εμφάνιση εγκατεστημένων στοιχείων αποθέματος" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "Εμφάνιση εγκατεστημένων στοιχείων αποθέματος στους πίνακες αποθέματος" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "Έλεγχος BOM κατά την εγκατάσταση στοιχείων" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Τα εγκατεστημένα στοιχεία αποθέματος πρέπει να υπάρχουν στο BOM του γονικού Προϊόντος" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "Να επιτρέπεται μεταφορά εκτός αποθέματος" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Να επιτρέπεται η μεταφορά στοιχείων αποθέματος που δεν είναι διαθέσιμα μεταξύ τοποθεσιών αποθέματος" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "Πρότυπο αναφοράς εντολής κατασκευής" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "Απαιτούμενο πρότυπο για τη δημιουργία του πεδίου αναφοράς εντολής κατασκευής" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "Απαίτηση υπεύθυνου κατόχου" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "Πρέπει να οριστεί υπεύθυνος ιδιοκτήτης για κάθε παραγγελία" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "Απαίτηση ενεργού προϊόντος" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "Αποτροπή δημιουργίας εντολής παραγωγής για ανενεργά προϊόντα" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "Απαίτηση κλειδωμένου προϊόντος" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "Αποτροπή δημιουργίας εντολής παραγωγής για ξεκλείδωτα προϊόντα" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "Απαίτηση έγκυρης BOM" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "Αποτροπή δημιουργίας εντολής παραγωγής αν δεν έχει επικυρωθεί η BOM" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "Απαίτηση κλειστών θυγατρικών εντολών" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "Αποτροπή ολοκλήρωσης εντολής παραγωγής μέχρι να κλείσουν όλες οι θυγατρικές εντολές" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "Εξωτερικές εντολές παραγωγής" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "Ενεργοποίηση λειτουργίας εξωτερικών εντολών παραγωγής" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Φραγή έως ότου περάσουν τα τεστ" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Αποτροπή ολοκλήρωσης εξόδων παραγωγής μέχρι να περάσουν όλα τα απαιτούμενα τεστ" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "Ενεργοποίηση εντολών επιστροφής" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "Ενεργοποίηση λειτουργίας εντολών επιστροφής στη διεπαφή χρήστη" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "Μοτίβο αναφοράς εντολής επιστροφής" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "Απαιτούμενο μοτίβο για τη δημιουργία του πεδίου αναφοράς εντολής επιστροφής" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "Επεξεργασία ολοκληρωμένων εντολών επιστροφής" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "Επιτρέπει την επεξεργασία εντολών επιστροφής μετά την ολοκλήρωσή τους" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "Μοτίβο αναφοράς εντολής πώλησης" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "Απαιτούμενο μοτίβο για τη δημιουργία του πεδίου αναφοράς εντολής πώλησης" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "Προεπιλεγμένη αποστολή εντολής πώλησης" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "Ενεργοποίηση δημιουργίας προεπιλεγμένης αποστολής με τις εντολές πώλησης" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "Επεξεργασία ολοκληρωμένων εντολών πώλησης" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Επιτρέπει την επεξεργασία εντολών πώλησης μετά την αποστολή ή ολοκλήρωσή τους" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "Η αποστολή απαιτεί έλεγχο" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "Αποτροπή ολοκλήρωσης αποστολών μέχρι να ελεγχθούν τα είδη" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "Σήμανση αποσταλμένων εντολών ως ολοκληρωμένων" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Οι εντολές πώλησης που επισημαίνονται ως αποσταλμένες ολοκληρώνονται αυτόματα, παρακάμπτοντας την κατάσταση «απεσταλμένο»" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "Μοτίβο αναφοράς εντολής αγοράς" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "Απαιτούμενο μοτίβο για τη δημιουργία του πεδίου αναφοράς εντολής αγοράς" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "Επεξεργασία ολοκληρωμένων εντολών αγοράς" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Επιτρέπει την επεξεργασία εντολών αγοράς μετά την αποστολή ή ολοκλήρωσή τους" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "Μετατροπή νομίσματος" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "Μετατροπή της αξίας είδους στο βασικό νόμισμα κατά την παραλαβή αποθέματος" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "Αυτόματη ολοκλήρωση εντολών αγοράς" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Αυτόματη σήμανση εντολών αγοράς ως ολοκληρωμένων όταν έχουν παραληφθεί όλα τα είδη" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Ενεργοποίηση υπενθύμισης κωδικού" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "Ενεργοποίηση λειτουργίας υπενθύμισης κωδικού στις σελίδες σύνδεσης" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Ενεργοποίηση εγγραφής" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "Ενεργοποίηση αυτοεγγραφής χρηστών στις σελίδες σύνδεσης" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "Ενεργοποίηση SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "Ενεργοποίηση SSO στις σελίδες σύνδεσης" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "Ενεργοποίηση εγγραφής μέσω SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Ενεργοποίηση αυτοεγγραφής μέσω SSO στις σελίδες σύνδεσης" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "Ενεργοποίηση συγχρονισμού ομάδων SSO" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Ενεργοποίηση συγχρονισμού ομάδων InvenTree με ομάδες από τον IdP" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "Κλειδί ομάδας SSO" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Το όνομα του πεδίου ομάδων που παρέχεται από τον IdP" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "Χάρτης ομάδων SSO" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Χαρτογράφηση ομάδων SSO σε τοπικές ομάδες InvenTree. Αν η ομάδα δεν υπάρχει, θα δημιουργηθεί." -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "Αφαίρεση ομάδων εκτός SSO" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Αν πρέπει να αφαιρούνται ομάδες από τον χρήστη όταν δεν παρέχονται από τον IdP. Η απενεργοποίηση μπορεί να προκαλέσει προβλήματα ασφαλείας" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "Απαίτηση email" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "Απαίτηση συμπλήρωσης email κατά την εγγραφή" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "Αυτόματη συμπλήρωση χρηστών SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "Αυτόματη συμπλήρωση στοιχείων χρήστη από τα δεδομένα SSO" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "Email δύο φορές" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "Κατά την εγγραφή ζητείται το email δύο φορές" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Κωδικός δύο φορές" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "Κατά την εγγραφή ζητείται ο κωδικός δύο φορές" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "Επιτρεπόμενοι τομείς" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Περιορισμός εγγραφής σε συγκεκριμένους τομείς (χωρισμένοι με κόμμα, ξεκινούν με @)" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "Ομάδα κατά την εγγραφή" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Ομάδα στην οποία εκχωρούνται οι νέοι χρήστες κατά την εγγραφή. Με ενεργό SSO sync, χρησιμοποιείται μόνο όταν δεν μπορεί να δοθεί ομάδα από τον IdP." -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "Επιβολή MFA" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "Οι χρήστες πρέπει να χρησιμοποιούν πολυπαραγοντική ασφάλεια" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "Έλεγχος plugins κατά την εκκίνηση" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Έλεγχος ότι όλα τα plugins είναι εγκατεστημένα κατά την εκκίνηση – χρήσιμο σε container περιβάλλοντα" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "Έλεγχος για ενημερώσεις plugin" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "Ενεργοποίηση περιοδικών ελέγχων για ενημερώσεις εγκατεστημένων plugins" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "Ενεργοποίηση URL integration" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "Ενεργοποίηση προσθήκης URL routes από plugins" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "Ενεργοποίηση ενσωμάτωσης στην πλοήγηση" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "Ενεργοποίηση ενσωμάτωσης των plugins στην πλοήγηση" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "Ενεργοποίηση ενσωμάτωσης εφαρμογών" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "Ενεργοποίηση προσθήκης εφαρμογών από plugins" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "Ενεργοποίηση ενσωμάτωσης χρονοπρογραμματισμού" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "Ενεργοποίηση εκτέλεσης χρονοπρογραμματισμένων εργασιών από plugins" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "Ενεργοποίηση ενσωμάτωσης γεγονότων" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "Ενεργοποίηση απόκρισης plugins σε εσωτερικά γεγονότα" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "Ενεργοποίηση ενσωμάτωσης διεπαφής" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "Ενεργοποίηση ενσωμάτωσης plugins στη διεπαφή χρήστη" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "Ενεργοποίηση ενσωμάτωσης email" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Ενεργοποίηση επεξεργασίας εισερχόμενων/εξερχόμενων emails από plugins" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "Ενεργοποίηση κωδικών έργου" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "Ενεργοποίηση κωδικών έργου για την παρακολούθηση projects" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "Ενεργοποίηση καταγραφής ιστορικών επιπέδων και αξιών αποθέματος" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "Εξαίρεση εξωτερικών τοποθεσιών" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "Περίοδος αυτόματης απογραφής" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "Εμφάνιση πλήρους ονόματος χρηστών" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "Εμφάνιση του πλήρους ονόματος των χρηστών αντί για το όνομα χρήστη" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "Εμφάνιση προφίλ χρηστών" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "Εμφάνιση προφίλ χρηστών στη σελίδα προφίλ τους" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "Ενεργοποίηση δεδομένων σταθμού δοκιμών" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "Ενεργοποίηση συλλογής δεδομένων σταθμού δοκιμών για τα αποτελέσματα δοκιμών" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "Ενεργοποίηση ping μηχανημάτων" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Ενεργοποίηση περιοδικού ping των καταχωρημένων μηχανημάτων για έλεγχο της κατάστασής τους" @@ -3956,33 +3988,33 @@ msgstr "Το προϊόν είναι ενεργό" msgid "Manufacturer is Active" msgstr "Ο κατασκευαστής είναι ενεργός" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Το προϊόν προμηθευτή είναι ενεργό" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Το εσωτερικό προϊόν είναι ενεργό" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Ο προμηθευτής είναι ενεργός" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Κατασκευαστής" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Εταιρεία" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "Διαθέτει απόθεμα" @@ -4071,7 +4103,7 @@ msgstr "ΑΦΜ" msgid "Company Tax ID" msgstr "ΑΦΜ εταιρείας" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Διεύθυνση" @@ -4163,7 +4195,7 @@ msgstr "Σημειώσεις αποστολής για εσωτερική χρή msgid "Link to address information (external)" msgstr "Σύνδεσμος σε πληροφορίες διεύθυνσης (εξωτερικό)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Προϊόν κατασκευαστή" @@ -4181,12 +4213,12 @@ msgstr "Επιλογή προϊόντος" msgid "Select manufacturer" msgstr "Επιλογή κατασκευαστή" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "MPN" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Κωδικός προϊόντος κατασκευαστή" @@ -4210,8 +4242,8 @@ msgstr "Οι μονάδες συσκευασίας πρέπει να είναι msgid "Linked manufacturer part must reference the same base part" msgstr "Το συνδεδεμένο προϊόν κατασκευαστή πρέπει να αναφέρεται στο ίδιο βασικό προϊόν" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Προμηθευτής" msgid "Select supplier" msgstr "Επιλογή προμηθευτή" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Κωδικός αποθέματος προμηθευτή" @@ -4258,8 +4290,8 @@ msgstr "βασικό κόστος" msgid "Minimum charge (e.g. stocking fee)" msgstr "Ελάχιστη χρέωση (π.χ. χρέωση αποθήκευσης)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Συσκευασία" @@ -4307,14 +4339,18 @@ msgstr "Προεπιλεγμένο νόμισμα που χρησιμοποιε msgid "Company Name" msgstr "Όνομα εταιρείας" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Σε απόθεμα" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "Κλιμακωτές τιμές" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Προέκυψε σφάλμα κατά την εξαγωγή δεδομένων" @@ -4419,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "Υπάρχον αναγνωριστικό βάσης δεδομένων για την εγγραφή" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "Η στήλη έχει ήδη αντιστοιχιστεί σε πεδίο της βάσης δεδομένων" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Το πεδίο έχει ήδη αντιστοιχιστεί σε στήλη δεδομένων" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "Η αντιστοίχιση στήλης πρέπει να συνδέεται με έγκυρη συνεδρία εισαγωγής" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "Η στήλη δεν υπάρχει στο αρχείο δεδομένων" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "Το πεδίο δεν υπάρχει στο μοντέλο προορισμού" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Το επιλεγμένο πεδίο είναι μόνο για ανάγνωση" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Συνεδρία εισαγωγής" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Πεδίο" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Στήλη" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Δείκτης γραμμής" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Αρχικά δεδομένα γραμμής" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Σφάλματα" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Έγκυρο" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "Απαιτείται ID για την ενημέρωση υπαρχόντων εγγραφών." -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "Δεν βρέθηκε εγγραφή με το παρεχόμενο ID" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "Δόθηκε μη έγκυρη μορφή ID" @@ -4579,7 +4615,7 @@ msgstr "Αριθμός αντιτύπων προς εκτύπωση για κά msgid "Connected" msgstr "Συνδεδεμένος" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Άγνωστο" @@ -4711,7 +4747,7 @@ msgstr "Μέγιστη τιμή για τύπο προόδου, απαιτείτ msgid "Order Reference" msgstr "Αναφορά παραγγελίας" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Σε εκκρεμότητα" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "Έχει τιμολόγηση" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Ολοκληρώθηκε πριν" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Ολοκληρώθηκε μετά" @@ -4779,17 +4815,17 @@ msgstr "Ολοκληρώθηκε μετά" msgid "External Build Order" msgstr "Εξωτερική εντολή παραγωγής" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "Παραγγελία" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Η παραγγελία ολοκληρώθηκε" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Εσωτερικό προϊόν" @@ -4797,27 +4833,27 @@ msgstr "Εσωτερικό προϊόν" msgid "Order Pending" msgstr "Η παραγγελία είναι σε εκκρεμότητα" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Ολοκληρώθηκε" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Έχει αποστολή" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Εντολή αγοράς" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "Εντολή αγοράς" msgid "Sales Order" msgstr "Εντολές Πώλησης" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "Η διεύθυνση δεν αντιστοιχεί στην επιλε msgid "Order description (optional)" msgstr "Περιγραφή παραγγελίας (προαιρετικά)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "Επιλογή κωδικού έργου για αυτή την παραγγελία" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "Σύνδεσμος σε εξωτερική σελίδα" @@ -4886,7 +4922,7 @@ msgstr "Ημερομηνία έναρξης" msgid "Scheduled start date for this order" msgstr "Προγραμματισμένη ημερομηνία έναρξης για αυτή την παραγγελία" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Επιθυμητή Προθεσμία" @@ -4919,413 +4955,421 @@ msgstr "Σημείο επαφής για αυτή την παραγγελία" msgid "Company address for this order" msgstr "Διεύθυνση εταιρείας για αυτή την παραγγελία" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "Αναφορά παραγγελίας" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Κατάσταση" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "Κατάσταση εντολής αγοράς" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "Εταιρεία από την οποία παραγγέλνονται τα είδη" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "Αναφορά προμηθευτή" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "Κωδικός αναφοράς παραγγελίας προμηθευτή" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "παραλήφθηκε από" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "Ημερομηνία ολοκλήρωσης της παραγγελίας" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "Προορισμός" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "Προορισμός για τα παραληφθέντα είδη" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "Ο προμηθευτής προϊόντος πρέπει να ταιριάζει με τον προμηθευτή της εντολής αγοράς" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "Η γραμμή δεν αντιστοιχεί στην εντολή αγοράς" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "Στη γραμμή λείπει συνδεδεμένο προϊόν" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "Η ποσότητα πρέπει να είναι θετικός αριθμός" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Πελάτης" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "Εταιρεία στην οποία πωλούνται τα είδη" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "Κατάσταση εντολής πώλησης" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "Αναφορά πελάτη " -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "Κωδικός αναφοράς παραγγελίας πελάτη" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "Ημερομηνία αποστολής" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "απεστάλη από" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "Η παραγγελία είναι ήδη ολοκληρωμένη" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "Η παραγγελία είναι ήδη ακυρωμένη" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "Μόνο μια ανοικτή παραγγελία μπορεί να σημειωθεί ως ολοκληρωμένη" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Η παραγγελία δεν μπορεί να ολοκληρωθεί καθώς υπάρχουν μη ολοκληρωμένες αποστολές" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Η παραγγελία δεν μπορεί να ολοκληρωθεί καθώς υπάρχουν μη ολοκληρωμένες δεσμεύσεις αποθέματος" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "Η παραγγελία δεν μπορεί να ολοκληρωθεί καθώς υπάρχουν μη ολοκληρωμένες γραμμές" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "Η παραγγελία είναι κλειδωμένη και δεν μπορεί να τροποποιηθεί" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "Ποσότητα είδους" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1822 msgid "Line item reference" msgstr "Αναφορά γραμμής" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "Σημειώσεις γραμμής" -#: order/models.py:1822 +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Ημερομηνία στόχος για αυτή τη γραμμή (αφήστε κενό για χρήση της ημερομηνίας στόχου από την παραγγελία)" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "Περιγραφή γραμμής (προαιρετικά)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "Πρόσθετο πλαίσιο για αυτή τη γραμμή" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "Τιμή μονάδας" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "Γραμμή εντολής αγοράς" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "Το προϊόν προμηθευτή πρέπει να ταιριάζει με τον προμηθευτή" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "Η εντολή παραγωγής πρέπει να έχει σημειωθεί ως εξωτερική" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "Οι εντολές παραγωγής μπορούν να συνδεθούν μόνο με προϊόντα συναρμολόγησης" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "Το προϊόν της εντολής παραγωγής πρέπει να ταιριάζει με το προϊόν της γραμμής" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "Προϊόν προμηθευτή" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "Παραλήφθηκε" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "Αριθμός ειδών που παραλήφθηκαν" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Τιμή αγοράς" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "Τιμή μονάδας αγοράς" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "Εξωτερική εντολή παραγωγής που θα καλυφθεί από αυτή τη γραμμή" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "Επιπλέον γραμμή εντολής αγοράς" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "Γραμμή εντολής πώλησης" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "Μόνο πωλήσιμα προϊόντα μπορούν να αντιστοιχιστούν σε εντολή πώλησης" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Τιμή πώλησης" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "Τιμή μονάδας πώλησης" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Αποστάλθηκε" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "Ποσότητα που αποστάλθηκε" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "Αποστολή εντολής πώλησης" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "Η διεύθυνση αποστολής πρέπει να αντιστοιχεί στον πελάτη" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "Διεύθυνση αποστολής για αυτή την αποστολή" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "Ημερομηνία αποστολής" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "Ημερομηνία παράδοσης" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "Ημερομηνία παράδοσης της αποστολής" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "Έλεγχος από" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "Χρήστης που έλεγξε αυτή την αποστολή" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Αποστολή" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "Αριθμός αποστολής" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "Αριθμός παρακολούθησης" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "Πληροφορίες παρακολούθησης αποστολής" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "Αριθμός τιμολογίου" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "Αριθμός αναφοράς του σχετικού τιμολογίου" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "Η αποστολή έχει ήδη σταλεί" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "Η αποστολή δεν έχει δεσμευμένα είδη αποθέματος" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "Η αποστολή πρέπει να ελεγχθεί πριν μπορέσει να ολοκληρωθεί" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "Επιπλέον γραμμή εντολής πώλησης" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "Δέσμευση αποθέματος εντολής πώλησης" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "Δεν έχει αντιστοιχιστεί είδος αποθέματος" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "Δεν είναι δυνατή η δέσμευση είδους αποθέματος σε γραμμή με διαφορετικό προϊόν" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "Δεν είναι δυνατή η δέσμευση αποθέματος σε γραμμή χωρίς προϊόν" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Η ποσότητα δέσμευσης δεν μπορεί να υπερβαίνει την ποσότητα αποθέματος" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Η ποσότητα πρέπει να είναι 1 για σειριοποιημένο είδος αποθέματος" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "Η εντολή πώλησης δεν αντιστοιχεί στην αποστολή" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Η αποστολή δεν αντιστοιχεί στην εντολή πώλησης" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Γραμμή" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "Αναφορά αποστολής εντολής πώλησης" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "Είδος" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "Επιλογή είδους αποθέματος προς δέσμευση" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "Εισαγωγή ποσότητας δέσμευσης αποθέματος" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "Αναφορά εντολής επιστροφής" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "Εταιρεία από την οποία επιστρέφονται τα είδη" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "Κατάσταση εντολής επιστροφής" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "Γραμμή εντολής επιστροφής" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "Πρέπει να καθοριστεί είδος αποθέματος" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "Η ποσότητα επιστροφής υπερβαίνει την ποσότητα αποθέματος" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "Η ποσότητα επιστροφής πρέπει να είναι μεγαλύτερη από το μηδέν" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "Μη έγκυρη ποσότητα για σειριοποιημένο είδος αποθέματος" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "Επιλογή είδους προς επιστροφή από τον πελάτη" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "Ημερομηνία παραλαβής" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "Έκβαση" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "Έκβαση για αυτή τη γραμμή" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "Κόστος που σχετίζεται με την επιστροφή ή επισκευή για αυτή τη γραμμή" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "Επιπλέον γραμμή εντολής επιστροφής" @@ -5353,7 +5397,7 @@ msgstr "Αντιγραφή επιπλέον γραμμών" msgid "Copy extra line items from the original order" msgstr "Αντιγραφή επιπλέον γραμμών από την αρχική παραγγελία" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Αντιγραφή παραμέτρων" @@ -5372,216 +5416,216 @@ msgstr "Γραμμές" msgid "Completed Lines" msgstr "Ολοκληρωμένες γραμμές" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Αντιγραφή παραγγελίας" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Καθορίστε επιλογές για την αντιγραφή αυτής της παραγγελίας" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "Μη έγκυρο ID παραγγελίας" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Όνομα προμηθευτή" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Η παραγγελία δεν μπορεί να ακυρωθεί" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Να επιτρέπεται το κλείσιμο της παραγγελίας με μη ολοκληρωμένες γραμμές" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Η παραγγελία έχει μη ολοκληρωμένες γραμμές" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Η παραγγελία δεν είναι ανοικτή" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Αυτόματη τιμολόγηση" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Αυτόματος υπολογισμός τιμής αγοράς βάσει των δεδομένων προϊόντος προμηθευτή" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Νόμισμα τιμής αγοράς" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Συγχώνευση ειδών" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Συγχώνευση ειδών με το ίδιο προϊόν, προορισμό και ημερομηνία στόχο σε μία γραμμή" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Εσωτερικός κωδικός προϊόντος" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Εσωτερική ονομασία προϊόντος" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Πρέπει να καθοριστεί προϊόν προμηθευτή" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Πρέπει να καθοριστεί εντολή αγοράς" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Ο προμηθευτής πρέπει να ταιριάζει με την εντολή αγοράς" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Η εντολή αγοράς πρέπει να ταιριάζει με τον προμηθευτή" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Γραμμή" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Επιλογή τοποθεσίας προορισμού για τα παραληφθέντα είδη" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Εισαγάγετε κωδικό παρτίδας για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Ημερομηνία λήξης" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Εισαγάγετε ημερομηνία λήξης για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Εισαγάγετε σειριακούς αριθμούς για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Παράκαμψη πληροφοριών συσκευασίας για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Πρόσθετη σημείωση για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Barcode" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Σαρωμένο barcode" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Το barcode χρησιμοποιείται ήδη" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Πρέπει να δοθούν γραμμές" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Πρέπει να καθοριστεί τοποθεσία προορισμού" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Οι δοθείσες τιμές barcode πρέπει να είναι μοναδικές" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Αποστολές" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Ολοκληρωμένες αποστολές" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Νόμισμα τιμής πώλησης" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Δεσμευμένα είδη" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Δεν δόθηκαν λεπτομέρειες αποστολής" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Η γραμμή δεν συνδέεται με αυτή την παραγγελία" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Η ποσότητα πρέπει να είναι θετική" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Εισαγάγετε σειριακούς αριθμούς προς δέσμευση" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Η αποστολή έχει ήδη σταλεί" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Η αποστολή δεν συνδέεται με αυτή την παραγγελία" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Δεν βρέθηκε αντιστοίχιση για τους παρακάτω σειριακούς αριθμούς" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Οι παρακάτω σειριακοί αριθμοί δεν είναι διαθέσιμοι" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Γραμμή εντολής επιστροφής" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Η γραμμή δεν αντιστοιχεί στην εντολή επιστροφής" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Η γραμμή έχει ήδη παραληφθεί" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Είδη μπορούν να παραληφθούν μόνο για παραγγελίες που είναι σε εξέλιξη" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Ποσότητα προς επιστροφή" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Νόμισμα τιμής γραμμής" @@ -5797,7 +5841,7 @@ msgstr "Προεπιλεγμένες λέξεις-κλειδιά για προϊ msgid "Icon" msgstr "Εικονίδιο" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Εικονίδιο (προαιρετικό)" @@ -5818,7 +5862,7 @@ msgstr "Προεπιλεγμένη τιμή" msgid "Default Parameter Value" msgstr "Προεπιλεγμένη τιμή παραμέτρου" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Προϊόντα" @@ -5933,7 +5977,7 @@ msgstr "Λέξεις-κλειδιά προϊόντος για βελτίωση msgid "Part category" msgstr "Κατηγορία προϊόντος" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" @@ -5942,7 +5986,7 @@ msgstr "IPN" msgid "Part revision or version number" msgstr "Αριθμός αναθεώρησης ή έκδοσης προϊόντος" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Αναθεώρηση" @@ -5966,7 +6010,7 @@ msgstr "Προεπιλεγμένη λήξη" msgid "Expiry time (in days) for stock items of this part" msgstr "Χρόνος λήξης (σε ημέρες) για είδη αποθέματος αυτού του προϊόντος" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Ελάχιστο απόθεμα" @@ -6447,355 +6491,355 @@ msgstr "Δεν μπορεί να δημιουργηθεί σχέση προϊό msgid "Duplicate relationship already exists" msgstr "Υπάρχει ήδη διπλή σχέση" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Γονική κατηγορία" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Γονική κατηγορία προϊόντος" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Υποκατηγορίες" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Αποτελέσματα" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Αριθμός αποτελεσμάτων που έχουν καταγραφεί για αυτό το πρότυπο" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Νόμισμα αγοράς για αυτό το είδος αποθέματος" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "Το αρχείο δεν είναι εικόνα" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Αρχικό προϊόν" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Επιλέξτε αρχικό προϊόν για αντιγραφή" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Αντιγραφή εικόνας" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Αντιγραφή εικόνας από το αρχικό προϊόν" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Αντιγραφή BOM" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Αντιγραφή λίστας υλικών (BOM) από το αρχικό προϊόν" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Αντιγραφή δεδομένων παραμέτρων από το αρχικό προϊόν" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Αντιγραφή σημειώσεων" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Αντιγραφή σημειώσεων από το αρχικό προϊόν" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "Αντιγραφή δοκιμών" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "Αντιγραφή προτύπων δοκιμών από το αρχικό προϊόν" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Αρχική ποσότητα αποθέματος" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Καθορίστε αρχική ποσότητα αποθέματος για αυτό το προϊόν. Αν η ποσότητα είναι μηδέν, δεν προστίθεται απόθεμα" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Αρχική τοποθεσία αποθέματος" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Καθορίστε αρχική τοποθεσία αποθέματος για αυτό το προϊόν" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Επιλέξτε προμηθευτή (ή αφήστε κενό για παράλειψη)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Επιλέξτε κατασκευαστή (ή αφήστε κενό για παράλειψη)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Κωδικός προϊόντος κατασκευαστή" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "Η επιλεγμένη εταιρεία δεν είναι έγκυρος προμηθευτής" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "Η επιλεγμένη εταιρεία δεν είναι έγκυρος κατασκευαστής" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Υπάρχει ήδη προϊόν κατασκευαστή με αυτό το MPN" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Υπάρχει ήδη προϊόν προμηθευτή με αυτό το SKU" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Όνομα κατηγορίας" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Σε παραγωγή" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "Ποσότητα αυτού του προϊόντος που βρίσκεται αυτή τη στιγμή σε παραγωγή" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Εκκρεμής ποσότητα αυτού του προϊόντος που έχει προγραμματιστεί για παραγωγή" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Είδη αποθέματος" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Αναθεωρήσεις" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Συνολικό απόθεμα" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Μη δεσμευμένο απόθεμα" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Απόθεμα παραλλαγών" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Αντιγραφή προϊόντος" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Αντιγραφή αρχικών δεδομένων από άλλο προϊόν" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Αρχικό απόθεμα" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Δημιουργία προϊόντος με αρχική ποσότητα αποθέματος" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Πληροφορίες προμηθευτή" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Προσθήκη αρχικών πληροφοριών προμηθευτή για αυτό το προϊόν" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Αντιγραφή παραμέτρων κατηγορίας" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Αντιγραφή προτύπων παραμέτρων από την επιλεγμένη κατηγορία προϊόντος" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Υπάρχουσα εικόνα" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Όνομα αρχείου υπάρχουσας εικόνας προϊόντος" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Το αρχείο εικόνας δεν υπάρχει" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Επικύρωση ολόκληρης της λίστας υλικών (BOM)" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Μπορεί να παραχθεί" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "Απαιτείται για εντολές παραγωγής" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "Δεσμευμένο σε εντολές παραγωγής" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "Απαιτείται για εντολές πώλησης" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "Δεσμευμένο σε εντολές πώλησης" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Ελάχιστη τιμή" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Παράκαμψη υπολογισμένης τιμής για την ελάχιστη τιμή" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Νόμισμα ελάχιστης τιμής" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Μέγιστη τιμή" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Παράκαμψη υπολογισμένης τιμής για τη μέγιστη τιμή" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Νόμισμα μέγιστης τιμής" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Ενημέρωση" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Ενημέρωση τιμολόγησης για αυτό το προϊόν" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Δεν ήταν δυνατή η μετατροπή από τα δοθέντα νομίσματα σε {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Η ελάχιστη τιμή δεν πρέπει να είναι μεγαλύτερη από τη μέγιστη τιμή" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Η μέγιστη τιμή δεν πρέπει να είναι μικρότερη από την ελάχιστη τιμή" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Επιλέξτε τη γονική συναρμολόγηση" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Επιλέξτε το προϊόν Προϊόντος" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Επιλέξτε προϊόν από το οποίο θα αντιγραφεί το BOM" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Αφαίρεση υπαρχόντων δεδομένων" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Αφαίρεση υπαρχόντων στοιχείων BOM πριν την αντιγραφή" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Συμπερίληψη κληρονομημένων" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Συμπερίληψη στοιχείων BOM που κληρονομούνται από προϊόντα προτύπων" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Παράλειψη μη έγκυρων γραμμών" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Ενεργοποιήστε αυτή την επιλογή για να παραλείπονται οι μη έγκυρες γραμμές" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Αντιγραφή εναλλακτικών προϊόντων" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Αντιγραφή εναλλακτικών προϊόντων κατά την αντιγραφή στοιχείων BOM" @@ -7516,7 +7560,7 @@ msgstr "Περίγραμμα" msgid "Print a border around each label" msgstr "Εκτύπωση περιγράμματος γύρω από κάθε ετικέτα" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "Οριζόντιος προσανατολισμός" @@ -7596,64 +7640,77 @@ msgstr "Παρέχει υποστήριξη για σάρωση barcodes TME" msgid "The Supplier which acts as 'TME'" msgstr "Ο προμηθευτής που λειτουργεί ως 'TME'" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Μόνο οι χρήστες προσωπικού μπορούν να διαχειρίζονται πρόσθετα" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "Η εγκατάσταση πρόσθετων είναι απενεργοποιημένη" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Το πρόσθετο εγκαταστάθηκε με επιτυχία" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Το πρόσθετο εγκαταστάθηκε στο {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "Το πρόσθετο δεν βρέθηκε στο μητρώο" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "Το πρόσθετο δεν είναι πακεταρισμένο πρόσθετο" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Δεν βρέθηκε όνομα πακέτου πρόσθετου" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Μόνο οι χρήστες προσωπικού μπορούν να διαχειρίζονται πρόσθετα" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "Η απεγκατάσταση προσθέτων είναι απενεργοποιημένη" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "Το πρόσθετο δεν μπορεί να απεγκατασταθεί καθώς είναι αυτή τη στιγμή ενεργό" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "Το πρόσθετο δεν μπορεί να απεγκατασταθεί καθώς είναι υποχρεωτικό" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "Το πρόσθετο δεν μπορεί να απεγκατασταθεί καθώς είναι δείγμα πρόσθετου" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "Το πρόσθετο δεν μπορεί να απεγκατασταθεί καθώς είναι ενσωματωμένο πρόσθετο" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "Το πρόσθετο δεν είναι εγκατεστημένο" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Η εγκατάσταση του πρόσθετου δεν βρέθηκε" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Το πρόσθετο απεγκαταστάθηκε με επιτυχία" @@ -7900,55 +7957,55 @@ msgstr "Η εγκατάσταση δεν επιβεβαιώθηκε" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Πλήρης επαναφόρτωση" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Εκτέλεση πλήρους επαναφόρτωσης του μητρώου προσθέτων" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Εξαναγκασμένη επαναφόρτωση" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Εξαναγκασμένη επαναφόρτωση του μητρώου προσθέτων, ακόμη κι αν είναι ήδη φορτωμένο" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Συλλογή προσθέτων" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Συλλογή προσθέτων και προσθήκη τους στο μητρώο" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Ενεργοποίηση πρόσθετου" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Ενεργοποίηση αυτού του πρόσθετου" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "Υποχρεωτικό πρόσθετο δεν μπορεί να απενεργοποιηθεί" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Διαγραφή ρύθμισης" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Διαγραφή της ρύθμισης του πρόσθετου από τη βάση δεδομένων" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "Ο χρήστης στον οποίο εφαρμόζεται αυτή η ρύθμιση" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "Είδη" @@ -7964,7 +8021,7 @@ msgstr "Το πρόσθετο δεν υποστηρίζει εκτύπωση ε msgid "Invalid label dimensions" msgstr "Μη έγκυρες διαστάσεις ετικέτας" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "Δεν δόθηκαν έγκυρα είδη στο πρότυπο" @@ -7988,152 +8045,156 @@ msgstr "Letter" msgid "Template file with this name already exists" msgstr "Υπάρχει ήδη αρχείο προτύπου με αυτό το όνομα" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "Όνομα προτύπου" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "Περιγραφή προτύπου" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "Αριθμός αναθεώρησης (αυτόματη αύξηση)" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "Συσχέτιση με μοντέλο κατά την εκτύπωση" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "Αποθήκευση του παραγόμενου αναφοράς ως συνημμένου στην συνδεδεμένη εγγραφή μοντέλου κατά την εκτύπωση" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "Μοτίβο ονόματος αρχείου" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "Μοτίβο για τη δημιουργία ονομάτων αρχείων" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "Το πρότυπο είναι ενεργό" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "Τύπος μοντέλου-στόχου για το πρότυπο" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Φίλτρα" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "Φίλτρα ερωτημάτων προτύπου (λίστα ζευγών key=value χωρισμένων με κόμμα)" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "Αρχείο προτύπου" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "Μέγεθος σελίδας για αναφορές PDF" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "Απόδοση αναφοράς σε οριζόντιο προσανατολισμό" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "Συγχώνευση" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "Απόδοση μίας ενιαίας αναφοράς για τα επιλεγμένα είδη" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "Αναφορά που δημιουργήθηκε από το πρότυπο {self.name}" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "Σφάλμα σύνταξης προτύπου" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "Σφάλμα κατά την απόδοση της αναφοράς" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "Σφάλμα κατά τη δημιουργία της αναφοράς" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "Σφάλμα κατά τη συγχώνευση των αποτελεσμάτων αναφοράς" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Πλάτος [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "Πλάτος ετικέτας, σε mm" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Ύψος [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "Ύψος ετικέτας, σε mm" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "Σφάλμα κατά την εκτύπωση ετικετών" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "Απόσπασμα" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "Αρχείο αποσπάσματος αναφοράς" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "Περιγραφή αρχείου αποσπάσματος" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "Πόρος" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "Αρχείο πόρου αναφοράς" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "Περιγραφή αρχείου πόρου" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "Επιλέξτε πρότυπο αναφοράς" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "Λίστα από πρωτεύοντα κλειδιά ειδών που θα συμπεριληφθούν στην αναφορά" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "Επιλέξτε πρότυπο ετικέτας" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "Πρόσθετο εκτύπωσης" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "Επιλέξτε πρόσθετο που θα χρησιμοποιηθεί για την εκτύπωση ετικετών" @@ -8231,7 +8292,7 @@ msgstr "Αναφορά δοκιμών είδους αποθέματος" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Εγκατεστημένα είδη" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "Το tag part_image απαιτεί μία παρουσία Aντικειμένου" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "Το tag company_image απαιτεί ένα Aντικειμένου Company" @@ -8304,7 +8365,7 @@ msgstr "Φιλτράρισμα κατά τοποθεσίες ανώτατου ε msgid "Include sub-locations in filtered results" msgstr "Συμπερίληψη υποτοποθεσιών στα φιλτραρισμένα αποτελέσματα" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Γονική τοποθεσία" @@ -8388,7 +8449,7 @@ msgstr "Ημερομηνία λήξης πριν από" msgid "Expiry date after" msgstr "Ημερομηνία λήξης μετά από" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Παλαιωμένο" @@ -8522,7 +8583,7 @@ msgstr "Πρέπει να καθοριστεί προϊόν" msgid "Stock items cannot be located into structural stock locations!" msgstr "Τα είδη αποθέματος δεν μπορούν να τοποθετηθούν σε δομικές τοποθεσίες αποθέματος!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Δεν μπορεί να δημιουργηθεί είδος αποθέματος για εικονικά προϊόντα" @@ -8567,7 +8628,7 @@ msgstr "Επιλέξτε αντίστοιχο προϊόν προμηθευτή msgid "Where is this stock item located?" msgstr "Πού βρίσκεται αυτό το είδος αποθέματος;" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Συσκευασία στην οποία αποθηκεύεται αυτό το είδος αποθέματος" @@ -8583,7 +8644,7 @@ msgstr "Είναι αυτό το είδος εγκατεστημένο σε άλ msgid "Serial number for this item" msgstr "Σειριακός αριθμός για αυτό το είδος" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Κωδικός παρτίδας για αυτό το είδος αποθέματος" @@ -8696,7 +8757,7 @@ msgstr "Το είδος αποθέματος βρίσκεται αυτή τη σ msgid "Serialized stock cannot be merged" msgstr "Σειριακό απόθεμα δεν μπορεί να συγχωνευθεί" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Διπλότυπα είδη αποθέματος" @@ -8820,7 +8881,7 @@ msgstr "Επιλέξτε προϊόν για το οποίο θα δημιουρ msgid "Quantity of serial numbers to generate" msgstr "Ποσότητα σειριακών αριθμών προς δημιουργία" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "Πρότυπο δοκιμής για αυτό το αποτέλεσμα" @@ -8844,222 +8905,222 @@ msgstr "Γονικό είδος" msgid "Parent stock item" msgstr "Γονικό είδος αποθέματος" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Χρήση μεγέθους συσκευασίας κατά την προσθήκη: η καθορισμένη ποσότητα είναι ο αριθμός των συσκευασιών" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "Χρήση μεγέθους συσκευασίας" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Εισαγάγετε σειριακούς αριθμούς για νέα είδη" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Κωδικός προϊόντος προμηθευτή" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Ληγμένο" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Θυγατρικά είδη" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "Εγγραφές ιχνηλάτησης" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "Τιμή αγοράς αυτού του είδους αποθέματος, ανά μονάδα ή συσκευασία" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Εισαγάγετε τον αριθμό ειδών αποθέματος για σειριοποίηση" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "Δεν δόθηκε είδος αποθέματος" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Η ποσότητα δεν πρέπει να υπερβαίνει το διαθέσιμο απόθεμα ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Τοποθεσία προορισμού αποθέματος" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Δεν μπορούν να εκχωρηθούν σειριακοί αριθμοί σε αυτό το προϊόν" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Οι σειριακοί αριθμοί υπάρχουν ήδη" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Επιλέξτε είδος αποθέματος προς εγκατάσταση" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Ποσότητα προς εγκατάσταση" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Εισαγάγετε την ποσότητα των ειδών προς εγκατάσταση" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Προσθέστε σημείωση συναλλαγής (προαιρετικά)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "Η ποσότητα προς εγκατάσταση πρέπει να είναι τουλάχιστον 1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Το είδος αποθέματος δεν είναι διαθέσιμο" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Το επιλεγμένο προϊόν δεν βρίσκεται στο Δελτίο Υλικών (BOM)" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "Η ποσότητα προς εγκατάσταση δεν πρέπει να υπερβαίνει τη διαθέσιμη ποσότητα" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Τοποθεσία προορισμού για το απεγκατεστημένο είδος" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Επιλέξτε προϊόν στο οποίο θα μετατραπεί το είδος αποθέματος" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "Το επιλεγμένο προϊόν δεν είναι έγκυρη επιλογή για μετατροπή" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Δεν είναι δυνατή η μετατροπή είδους αποθέματος με εκχωρημένο SupplierPart" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Κωδικός κατάστασης είδους αποθέματος" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Επιλέξτε είδη αποθέματος για αλλαγή κατάστασης" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Δεν επιλέχθηκαν είδη αποθέματος" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Υποτοποθεσίες" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Γονική τοποθεσία αποθέματος" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Το προϊόν πρέπει να είναι διαθέσιμο για πώληση" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Το είδος έχει δεσμευτεί σε εντολή πώλησης" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Το είδος έχει δεσμευτεί σε εντολή παραγωγής" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Πελάτης στον οποίο θα αποδοθούν τα είδη αποθέματος" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "Η επιλεγμένη εταιρεία δεν είναι πελάτης" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Σημειώσεις απόδοσης αποθέματος" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Πρέπει να δοθεί λίστα ειδών αποθέματος" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Σημειώσεις συγχώνευσης αποθέματος" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Να επιτρέπονται διαφορετικοί προμηθευτές" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Να επιτρέπεται η συγχώνευση ειδών αποθέματος με διαφορετικά προϊόντα προμηθευτή" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Να επιτρέπεται διαφορετική κατάσταση" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Να επιτρέπεται η συγχώνευση ειδών αποθέματος με διαφορετικούς κωδικούς κατάστασης" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Πρέπει να δοθούν τουλάχιστον δύο είδη αποθέματος" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Καμία αλλαγή" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Τιμή πρωτεύοντος κλειδιού StockItem" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "Το είδος δεν βρίσκεται σε απόθεμα" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "Το είδος βρίσκεται ήδη σε απόθεμα" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "Η ποσότητα δεν πρέπει να είναι αρνητική" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Σημειώσεις συναλλαγής αποθέματος" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "Συγχώνευση με υπάρχον απόθεμα" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "Συγχώνευση επιστρεφόμενων ειδών με υπάρχοντα είδη αποθέματος, όπου είναι δυνατό" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "Επόμενος σειριακός αριθμός" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "Προηγούμενος σειριακός αριθμός" @@ -9541,83 +9602,99 @@ msgstr "Εντολές Πώλησης" msgid "Return Orders" msgstr "Εντολές Επιστροφής" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Όνομα χρήστη" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Όνομα" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Το όνομα του χρήστη" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Επώνυμο" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Το επώνυμο του χρήστη" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Διεύθυνση email του χρήστη" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Προσωπικό" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Διαθέτει ο χρήστης δικαιώματα προσωπικού;" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Υπερχρήστης" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Είναι ο χρήστης υπερχρήστης;" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Είναι ο λογαριασμός χρήστη ενεργός;" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Μόνο υπερχρήστης μπορεί να τροποποιήσει αυτό το πεδίο" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "Κωδικός πρόσβασης" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Κωδικός πρόσβασης του χρήστη" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "Παράβλεψη προειδοποίησης" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Παράβλεψη της προειδοποίησης σχετικά με τους κανόνες κωδικού πρόσβασης" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "Δεν έχετε δικαίωμα δημιουργίας χρηστών" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Ο λογαριασμός σας δημιουργήθηκε." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Παρακαλούμε χρησιμοποιήστε τη λειτουργία επαναφοράς κωδικού πρόσβασης για να συνδεθείτε" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Καλώς ήρθατε στο InvenTree" diff --git a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po index d6e952a512..d1e37c9d76 100644 --- a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 01:43+0000\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -50,7 +50,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "" @@ -89,7 +89,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "" @@ -105,13 +105,13 @@ msgstr "" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "" @@ -124,75 +124,91 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "" @@ -200,7 +216,7 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "" @@ -253,18 +269,18 @@ msgid "Invalid choice" msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -274,7 +290,7 @@ msgstr "" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "" @@ -321,51 +337,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -521,11 +537,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -537,7 +553,7 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "" @@ -546,21 +562,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -570,8 +586,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -580,9 +596,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -654,16 +670,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -672,32 +688,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -705,26 +721,26 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -768,8 +784,8 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -798,7 +814,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -846,16 +862,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -876,7 +892,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "" @@ -920,7 +936,7 @@ msgid "Priority of this build order" msgstr "" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" @@ -949,7 +965,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -965,23 +981,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1002,10 +1018,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1017,7 +1033,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1052,15 +1068,15 @@ msgstr "" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1084,378 +1100,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1479,7 +1495,7 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1503,19 +1519,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1535,11 +1551,11 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "" @@ -1601,7 +1617,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1613,8 +1629,8 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "" @@ -1634,10 +1650,10 @@ msgstr "" msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1661,11 +1677,11 @@ msgstr "" msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "" @@ -1715,7 +1731,7 @@ msgstr "" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1733,7 +1749,7 @@ msgstr "" msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "" @@ -1798,7 +1814,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1834,7 +1850,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1862,7 +1878,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" @@ -1875,7 +1891,7 @@ msgstr "" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "" @@ -1931,7 +1947,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1983,7 +1999,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "" @@ -1999,334 +2015,334 @@ msgstr "" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2376,1243 +2392,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3957,33 +3989,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4072,7 +4104,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "" @@ -4164,7 +4196,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4182,12 +4214,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4211,8 +4243,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4223,7 +4255,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4259,8 +4291,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4308,14 +4340,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4420,67 +4456,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4580,7 +4616,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4712,7 +4748,7 @@ msgstr "" msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4768,11 +4804,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4780,17 +4816,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4798,27 +4834,27 @@ msgstr "" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4826,8 +4862,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4871,11 +4907,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "" @@ -4887,7 +4923,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4920,413 +4956,421 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "" -#: order/models.py:1800 -msgid "Line item reference" +#: order/models.py:1814 +msgid "Line Number" msgstr "" -#: order/models.py:1807 -msgid "Line item notes" +#: order/models.py:1815 +msgid "Line number for this item (optional)" msgstr "" #: order/models.py:1822 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1829 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5354,7 +5398,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5373,216 +5417,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5798,7 +5842,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5819,7 +5863,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5934,7 +5978,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5943,7 +5987,7 @@ msgstr "" msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "" @@ -5967,7 +6011,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6448,355 +6492,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7517,7 +7561,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7597,64 +7641,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7901,55 +7958,55 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7965,7 +8022,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7989,152 +8046,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8232,7 +8293,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8289,7 +8350,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8305,7 +8366,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8389,7 +8450,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8523,7 +8584,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8568,7 +8629,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8584,7 +8645,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8697,7 +8758,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8821,7 +8882,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8845,222 +8906,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9542,82 +9603,98 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:240 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po index ad97e6354d..1d10f99a91 100644 --- a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -49,7 +49,7 @@ msgstr "Sin datos proporcionados" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "El usuario no tiene permiso para ver este modelo" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "No se pudo convertir {original} a {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Cantidad proporcionada no válida" @@ -104,13 +104,13 @@ msgstr "Ingrese la fecha" msgid "Invalid decimal value" msgstr "Número decimal no válido" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Notas" @@ -123,75 +123,91 @@ msgstr "El valor '{name}' no aparece en formato de patrón" msgid "Provided value does not match required pattern: " msgstr "El valor proporcionado no coincide con el patrón requerido: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "No se puede serializar más de 1000 elementos a la vez" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "No se ha proporcionado un número de serie" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Serie duplicada" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Grupo no válido {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Rango del grupo {group} supera la cantidad permitida ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Numeros de serie no encontrados" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "El número de números de serie únicos ({n}) tiene que coincidir con la cantidad ({q})" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Eliminar etiquetas HTML de este valor" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "Los datos contienen contenido de marcado prohibido" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Error de conexión" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "El servidor respondió con código de estado no válido" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Se ha producido una excepción" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "El servidor respondió con un valor de longitud de contenido inválido" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "El tamaño de la imagen es demasiado grande" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "La descarga de imagen excedió el tamaño máximo" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "El servidor remoto devolvió una respuesta vacía" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "La URL proporcionada no es un archivo de imagen válido" @@ -199,7 +215,7 @@ msgstr "La URL proporcionada no es un archivo de imagen válido" msgid "Log in to the app" msgstr "Iniciar sesión en la aplicación" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Correo electrónico" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Selección no válida" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nombre" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Descripción" msgid "Description (optional)" msgstr "Descripción (opcional)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Ruta" @@ -320,51 +336,51 @@ msgstr "Se ha registrado un error por el servidor." msgid "Image" msgstr "Imágen" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Debe ser un número válido" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Moneda" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Seleccionar moneda de las opciones disponibles" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Imagen remota" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL de imagen remota" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "La descarga de imágenes desde la URL remota no está habilitada" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Error al descargar la imagen desde la URL remota" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "Chino (Simplificado)" msgid "Chinese (Traditional)" msgstr "Chino (Tradicional)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Actualización disponible" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "Una actualización para InvenTree está disponible" @@ -536,7 +552,7 @@ msgstr "Unidad física inválida" msgid "Not a valid currency code" msgstr "No es un código de moneda válido" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Estado del pedido" @@ -545,21 +561,21 @@ msgstr "Estado del pedido" msgid "Parent Build" msgstr "Construcción o Armado Superior" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Incluye Variantes" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "Incluye Variantes" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "Incluye Variantes" msgid "Part" msgstr "Parte" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoría" @@ -653,16 +669,16 @@ msgstr "Excluir Árbol" msgid "Build must be cancelled before it can be deleted" msgstr "La compilación debe cancelarse antes de poder ser eliminada" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Consumible" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Opcional" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Montaje" @@ -671,32 +687,32 @@ msgstr "Montaje" msgid "Tracked" msgstr "Rastreado" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Comprobable" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Pedido pendiente" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Asignadas" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Agotado" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponible" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "En pedido" @@ -704,26 +720,26 @@ msgstr "En pedido" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Construir órden" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Ubicación" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Salida" @@ -767,8 +783,8 @@ msgstr "La fecha límite debe ser posterior a la fecha de inicio" msgid "Build Order Reference" msgstr "Número de orden de construcción o armado" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Referencia de orden de venta" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Ubicación de la fuente" @@ -845,16 +861,16 @@ msgstr "Estado de la construcción" msgid "Build status code" msgstr "Código de estado de construcción" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Numero de lote" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Número de lote de este producto final" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Fecha de Creación" @@ -875,7 +891,7 @@ msgstr "Fecha límite de finalización" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Fecha límite para la finalización de la construcción. La construcción estará vencida después de esta fecha." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Fecha de finalización" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Prioridad de esta orden de construcción" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Código del proyecto" @@ -948,7 +964,7 @@ msgstr "El pedido {build} ha sido procesado" msgid "A build order has been completed" msgstr "Pedido #[order] ha sido procesado" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Los números de serie deben ser proporcionados para las partes rastreables" @@ -964,23 +980,23 @@ msgstr "La construcción de la salida ya está completa" msgid "Build output does not match Build Order" msgstr "La salida de la construcción no coincide con el orden de construcción" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "La cantidad debe ser mayor que cero" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "La cantidad no puede ser mayor que la cantidad de salida" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "La construcción {serial} no ha pasado todas las pruebas requeridas" @@ -1001,10 +1017,10 @@ msgstr "Construir línea de pedido" msgid "Build object" msgstr "Ensamblar equipo" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Ensamblar equipo" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "La cantidad debe ser 1 para el stock serializado" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Cantidad asignada ({q}) no debe exceder la cantidad disponible de stock ({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "Artículo de stock sobreasignado" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Artículo de stock" @@ -1083,378 +1099,378 @@ msgstr "Artículo de stock de destino" msgid "Build Level" msgstr "Nivel de construcción" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Nombre de parte" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "La salida de construcción no coincide con la construcción padre" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "La parte de salida no coincide con la parte de la Orden de Construcción" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Esta salida de construcción ya ha sido completada" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Esta salida de construcción no está completamente asignada" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Ingrese la cantidad para la producción de la construcción" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Cantidad entera requerida para partes rastreables" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Cantidad entera requerida, ya que la factura de materiales contiene partes rastreables" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Números de serie" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Introduzca los números de serie de salidas de construcción" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Ubicación de stock para objetos construidos" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Autoasignar Números de Serie" -#: build/serializers.py:378 +#: build/serializers.py:385 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:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Los siguientes números seriales ya existen o son inválidos" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Debe proporcionarse una lista de salidas de construcción" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Ubicación de almacén para salidas descartadas" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Descartar asignaciones" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar cualquier asignación de existencias para las salidas descartadas" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Razón para descartar la salida de ensamble(s)" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Ubicación para las salidas de construcción completadas" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Aceptar Asignación Incompleta" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Completar salidas si el inventario no se ha asignado completamente" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Consumir Stock Asignado" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Consume cualquier stock que ya ha sido asignado a esta construcción" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Eliminar salidas incompletas" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Eliminar cualquier salida de construcción que no se haya completado" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "No permitido" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Aceptar como consumido por este pedido de construcción" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Liberar antes de completar esta orden de construcción" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Stock sobreasignado" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Cómo quieres manejar los artículos extra de inventario asignados a la orden de construcción" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Algunos artículos de inventario han sido sobreasignados" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Aceptar no asignado" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Aceptar que los artículos de stock no se han asignado completamente a este pedido de construcción" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "El stock requerido no ha sido completamente asignado" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Aceptar incompleto" -#: build/serializers.py:793 +#: build/serializers.py:800 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:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "La cantidad de construcción requerida aún no se ha completado" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "La orden de construcción tiene órdenes hijas de construcción abiertas" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Orden de construcción debe estar en estado de producción" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "El orden de construcción tiene salidas incompletas" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Linea de ensamble" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "La salida de la construcción debe apuntar a la misma construcción" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Crear partida" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part debe apuntar a la misma parte que la orden de construcción" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "El artículo debe estar en stock" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Cantidad disponible ({q}) excedida" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "La salida de la construcción debe especificarse para la asignación de partes rastreadas" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "La salida de construcción no se puede especificar para la asignación de partes no rastreadas" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Debe proporcionarse la adjudicación de artículos" -#: build/serializers.py:1087 +#: build/serializers.py:1094 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:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Excluir ubicación" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Excluir artículos de stock de esta ubicación seleccionada" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Stock intercambiable" -#: build/serializers.py:1103 +#: build/serializers.py:1110 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:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Sustituir stock" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Permitir la asignación de partes sustitutas" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Elementos opcionales" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Asignar artículos de la BOM opcionales para construir la orden" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Referencia BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "ID de la parte BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Nombre de parte la BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Parte del proveedor" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Cantidad Asignada" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Referencia de orden de Ensamblado" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Nombre de la categoría por pieza" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Rastreable" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Heredado" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Item de Lista de Materiales" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "En producción" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Stock externo" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Stock Disponible" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Stock sustituto disponible" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Stock variable disponible" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "En espera" msgid "Cancelled" msgstr "Cancelado" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "Orden de construcción atrasada" msgid "Build order {bo} is now overdue" msgstr "El pedido de construcción {bo} está atrasado" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "¿Es enlace?" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "¿Es archivo?" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "El usuario no tiene permiso para eliminar estos adjuntos" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "El usuario no tiene permiso para eliminar este adjunto" @@ -1534,11 +1550,11 @@ msgstr "No se han proporcionado códigos de divisa válidos" msgid "No plugin" msgstr "Sin plugin" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Etiqueta del código del proyecto" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Actualizado" @@ -1600,7 +1616,7 @@ msgstr "Cadena de clave debe ser única" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Usuario" msgid "Price break quantity" msgstr "Cantidad de salto de precio" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Precio" @@ -1633,10 +1649,10 @@ msgstr "Punto final en el que se recibe este webhook" msgid "Name for this webhook" msgstr "Nombre para este webhook" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Activo" @@ -1660,11 +1676,11 @@ msgstr "Clave" msgid "Shared secret for HMAC" msgstr "Secreto compartido para HMAC" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "ID de mensaje" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "Identificador único para este mensaje" @@ -1714,7 +1730,7 @@ msgstr "Título" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Autor" msgid "Summary" msgstr "Resumen" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Leer" @@ -1797,7 +1813,7 @@ msgstr "Archivo no encontrado" msgid "Missing external link" msgstr "Falta enlace externo" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "Tamaño del archivo" msgid "File size in bytes" msgstr "Tamaño del archivo en bytes" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Tipo de modelo no válido especificado para el archivo adjunto" @@ -1861,7 +1877,7 @@ msgstr "Llave lógica" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Valor" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "Nombre del estado" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Etiqueta" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "Lista de selección" @@ -1982,7 +1998,7 @@ msgstr "Entrada por defecto" msgid "Default entry for this selection list" msgstr "Entrada predeterminada para esta lista de selección" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Creado" @@ -1998,334 +2014,334 @@ msgstr "Última actualización" msgid "Date and time that the selection list was last updated" msgstr "Fecha y hora en que la lista de selección fue actualizada por última vez" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "Entrada de lista de selección" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "Entradas de la lista de selección" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "Lista de selección a la que pertenece esta entrada" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "Valor del elemento de la lista de selección" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "Etiqueta para la entrada de lista de selección" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "Descripción de la entrada de lista de selección" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "¿Está activa esta entrada de la lista de selección?" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "Plantilla de parámetro" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "El nombre de parámetro en la plantilla tiene que ser único" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "Nombre de Parámetro" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "Unidades" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "Casilla de verificación" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "¿Es este parámetro una casilla de verificación?" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "Opciones" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "Opciones válidas para este parámetro (separados por comas)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "Lista de selección para este parámetro" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "Opción inválida para el valor del parámetro" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Plantilla" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Datos" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "Valor del parámetro" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Nota" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Campo de nota opcional" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "Escanear código de barras" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "Datos de código de barras" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "Usuario que escaneó el código de barras" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "Fecha y hora del escaneo de código de barras" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "Dispositivo URL que procesó el código de barras" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "Datos de contexto para el escaneo de código de barras" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "Respuesta" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "Respuesta de datos del escaneo de código de barras" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Resultado" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "¿El escaneo de código de barras fue exitoso?" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Clave" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Está en ejecución" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Tareas pendientes" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Tareas Programadas" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Tareas fallidas" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Identificación de Tarea" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Identificación de tarea única" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Bloquear" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Bloquear hora" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Nombre de la tarea" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Función" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Nombre de la Función" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumentos" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Argumentos de la tarea" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Argumentos de palabra clave" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Argumentos de palabra clave de tarea" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Nombre de Archivo" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "El usuario no tiene permiso para crear o editar archivos adjuntos para este modelo" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Lista de selección bloqueada" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Sin grupo" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "La URL del sitio está bloqueada por su configuración" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Reinicio requerido" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Se ha cambiado una configuración que requiere un reinicio del servidor" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Migraciones pendientes" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Número de migraciones de base de datos pendientes" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Identificador único para esta instancia de InvenTree" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Nombre de la instancia del servidor" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Descriptor de cadena para la instancia del servidor" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Usar nombre de instancia" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Utilice el nombre de la instancia en la barra de título" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Restringir mostrar 'acerca de'" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Mostrar la modal `about` solo para superusuarios" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nombre de empresa" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "Nombre interno de empresa" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "URL Base" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "URL base para la instancia del servidor" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Moneda predeterminada" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "Seleccione la moneda base para los cálculos de precios" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "Monedas admitidas" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "Listado de códigos de divisa soportados" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "Intervalo de actualización de moneda" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Con qué frecuencia actualizar los tipos de cambio (establecer a cero para desactivar)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "días" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "Plugin de Actualización de Moneda" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "Plugin de actualización de moneda a usar" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "Descargar desde URL" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "Permitir la descarga de imágenes y archivos remotos desde la URL externa" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "Límite de tamaño de descarga" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "Tamaño máximo de descarga permitido para la imagen remota" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "Agente de usuario usado para descargar desde la URL" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Permitir reemplazar el agente de usuario utilizado para descargar imágenes y archivos desde URL externa (dejar en blanco para el valor predeterminado)" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "Validación estricta de URL" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "Requerir especificación de esquema al validar URLs" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "Actualizar intervalo de actualización" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "Con qué frecuencia comprobar actualizaciones (establecer a cero para desactivar)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Copia de seguridad automática" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "Activar copia de seguridad automática de los archivos de base de datos y medios" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "Intervalo de respaldo automático" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "Especificar número de días entre eventos automatizados de copia de seguridad" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "Intervalo de eliminación de tareas" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "Los resultados de las tareas en segundo plano se eliminarán después del número especificado de días" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "Intervalo de eliminación de registro de errores" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "Los registros de errores se eliminarán después del número especificado de días" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "Intervalo de eliminación de notificaciones" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "Las notificaciones de usuario se eliminarán después del número especificado de días" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Soporte de código de barras" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "Habilitar el soporte para escáner de códigos de barras en la interfaz web" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "Guardar resultados de código de barras" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "Guardar resultados de código de barras en la base de datos" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "Número máximo de escaneos de código de barras" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "Número máximo de resultados de escaneo de código de barras para almacenar" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "Retraso de entrada de código de barras" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "Tiempo de retraso en la lectura de códigos de barras" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "Soporte para Webcam de código de barras" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "Permitir escaneo de código de barras a través de webcam en el navegador" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "Mostrar datos del código de barra como texto en el navegador" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "Complemento para generar códigos de barra" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "Complemento a usar para la generación de datos de códigos de barra internos" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "Revisiones de partes" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "Habilitar campo de revisión para parte" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "Patrón de expresión regular para IPN de la parte coincidente" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "Permitir IPN duplicado" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "Permitir que varias partes compartan el mismo IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "Permitir editar IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "Permite cambiar el valor de IPN mientras se edita una parte" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "Copiar parte de datos BOM" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "Copiar datos BOM por defecto al duplicar una parte" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "Copiar parámetros de parte" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "Copiar datos de parámetro por defecto al duplicar una parte" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "Copiar parte de datos de prueba" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "Copiar datos de parámetro por defecto al duplicar una parte" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "Copiar plantillas de parámetros de categoría" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "Copiar plantillas de parámetros de categoría al crear una parte" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "Las partes son plantillas por defecto" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "Las partes pueden ser ensambladas desde otros componentes por defecto" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Componente" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "Las partes pueden ser usadas como subcomponentes por defecto" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Comprable" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "Las partes son comprables por defecto" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Vendible" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "Las partes se pueden vender por defecto" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "Las partes son rastreables por defecto" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Virtual" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "Las partes son virtuales por defecto" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "Mostrar partes relacionadas" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "Mostrar partes relacionadas para una parte" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "Datos iniciales de existencias" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "Permitir la creación del stock inicial al añadir una nueva parte" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "Datos iniciales del proveedor" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Permitir la creación de datos iniciales del proveedor al agregar una nueva parte" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "Formato de visualización de Nombre de Parte" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "Formato para mostrar el nombre de la parte" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "Icono por defecto de la categoría de parte" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "Icono por defecto de la categoría de parte (vacío significa que no hay icono)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "Mínimo de lugares decimales en el precio" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Número mínimo de decimales a mostrar al procesar los datos de precios" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "Máximo de lugares decimales en el precio" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Número máximo de decimales a mostrar al procesar los datos de precios" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "Usar precios de proveedor" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Incluir descuentos de precios del proveedor en los cálculos generales de precios" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "Anulación del historial de compra" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "El precio histórico de compra anula los descuentos de precios del proveedor" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "Usar precio del artículo de almacén" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Usar los precios de los datos de inventario introducidos manualmente para los cálculos de precios" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "Edad del precio del artículo de almacén" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Excluir artículos de almacén anteriores a este número de días de los cálculos de precios" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "Usar precios variantes" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "Incluir variantes de precios en los cálculos generales de precios" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "Solo variantes activas" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "Usar solo partes de variantes activas para calcular los precios de variantes" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "Intervalo de reconstrucción de precios" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "Número de días antes de que el precio de la parte se actualice automáticamente" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Precios internos" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "Habilitar precios internos para partes" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "Anulación del precio interno" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "Si está disponible, los precios internos anulan los cálculos del rango de precios" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "Habilitar impresión de etiquetas" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "Habilitar impresión de etiquetas desde la interfaz web" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "PPP de la imagen de etiqueta" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Resolución DPI al generar archivos de imagen que suministrar para etiquetar complementos de impresión" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Habilitar informes" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "Habilitar generación de informes" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "Modo de depuración" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "Generar informes en modo de depuración (salida HTML)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "Registrar errores de reportes" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "Registrar errores ocurridos al generar reportes" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Tamaño de página" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "Tamaño de página predeterminado para informes PDF" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "Forzar unidades de parámetro" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "Si se proporcionan unidades, los valores de parámetro deben coincidir con las unidades especificadas" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "Seriales únicos globalmente" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "Los números de serie para los artículos de inventario deben ser únicos globalmente" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "Eliminar existencias agotadas" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "Determina el comportamiento por defecto al agotarse un artículo del inventario" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "Plantilla de código de lote" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "Plantilla para generar códigos de lote por defecto para artículos de almacén" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "Expiración de stock" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "Habilitar la funcionalidad de expiración de stock" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "Vender existencias caducadas" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "Permitir venta de existencias caducadas" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "Tiempo histórico de Stock" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "Número de días de artículos de stock se consideran obsoletos antes de caducar" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "Crear Stock Caducado" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "Permitir crear con stock caducado" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "Control de Stock" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "Habilitar control de propiedad sobre ubicaciones de stock y artículos" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "Icono por defecto de ubicación de almacén" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "Icono por defecto de ubicación de almacén (vacío significa que no hay icono)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "Mostrar Articulos de Stock Instalados" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "Mostrar los artículos de stock instalados en las tablas de stock" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "Permitir transferencia Sin Existencias" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Permitir que artículos del inventario sin existencias puedan ser transferidos entre ubicaciones de inventario" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "Patrón de Referencia de Ordenes de Armado" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "Patrón requerido para generar el campo de referencia de la Orden de Ensamblado" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "Requerir Dueño Responsable" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "Se debe asignar un dueño responsable a cada orden" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "Requerir Parte Activa" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "Impedir la creación de órdenes de fabricación para partes inactivas" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "Requerir Parte Bloqueada" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "Impedir la creación de órdenes de fabricación para partes bloqueadas" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "Impedir la creación de órdenes de fabricación a menos que se haya validado la lista de materiales" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "Prevenir la finalización de la orden de construcción hasta que todas las órdenes hijas estén cerradas" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Bloquear hasta que los Tests pasen" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Evitar que las construcciones sean completadas hasta que todas las pruebas requeridas pasen" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "Habilitar órdenes de devolución" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "Habilitar la funcionalidad de orden de devolución en la interfaz de usuario" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "Patrón de referencia de orden de devolución" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "Patrón requerido para generar el campo de referencia de devolución de la orden" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "Editar ordenes de devolución completadas" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "Permitir la edición de ordenes de devolución después de que hayan sido completados" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "Patrón de Referencia de Ordenes de Venta" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "Patrón requerido para generar el campo de referencia de la orden de venta" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "Envío Predeterminado de Ordenes de Venta" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "Habilitar la creación de envío predeterminado con ordenes de entrega" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "Editar Ordenes de Venta Completados" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Permitir la edición de ordenes de venta después de que hayan sido enviados o completados" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "Marcar pedidos enviados como completados" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Los pedidos marcados como enviados se completarán automáticamente, evitando el estado de \"envío\"" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "Patrón de Referencia de Orden de Compra" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "Patrón requerido para generar el campo de referencia de la Orden de Compra" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "Editar Ordenes de Compra Completados" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Permitir la edición de órdenes de venta después de que hayan sido enviados o completados" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "Convertir moneda" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "Autocompletar Ordenes de compra" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Marcar automáticamente las órdenes de compra como completas cuando se reciben todos los artículos de línea" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Habilitar función de contraseña olvidada" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "Activar la función olvido de contraseña en las páginas de inicio de sesión" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Habilitar registro" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "Activar auto-registro para usuarios en las páginas de inicio de sesión" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "Habilitar SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "Habilitar SSO en las páginas de inicio de sesión" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "Habilitar registro SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Activar autoregistro a través de SSO para usuarios en las páginas de inicio de sesión" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "Habilitar sincronización de grupo SSO" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Habilitar la sincronización de grupos de Inventree con grupos proporcionados por el IdP" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "Clave de grupo SSO" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "El nombre del atributo reclamado por el grupo proporcionado por el IdP" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "Mapa del grupo SSO" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Un mapeo de grupos SSO a grupos de Inventree locales. Si el grupo local no existe, se creará." -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "Eliminar grupos fuera de SSO" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "Email requerido" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "Requiere usuario para suministrar correo al registrarse" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "Auto-rellenar usuarios SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "Rellenar automáticamente los datos de usuario de la cuenta SSO" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "Correo dos veces" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "Al registrarse pregunte dos veces a los usuarios por su correo" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Contraseña dos veces" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "Al registrarse, preguntar dos veces a los usuarios por su contraseña" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "Dominios permitidos" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Restringir el registro a ciertos dominios (separados por comas, comenzando por @)" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "Grupo al registrarse" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Grupo al que se asignan nuevos usuarios al registrarse. Si la sincronización de grupo SSO está activada, este grupo sólo se establece si no se puede asignar ningún grupo desde el IdP." -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "Forzar MFA" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "Los usuarios deben utilizar seguridad multifactor." -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "Comprobar complementos al iniciar" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Comprobar que todos los complementos están instalados en el arranque - habilitar en entornos de contenedores" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "Revisar actualizaciones del plugin" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "Habilitar comprobaciones periódicas para actualizaciones de plugins instalados" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "Habilitar integración de URL" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "Habilitar plugins para añadir rutas de URL" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "Habilitar integración de navegación" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "Habilitar plugins para integrar en la navegación" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "Habilitar integración de la aplicación" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "Habilitar plugins para añadir aplicaciones" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "Habilitar integración de programación" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "Habilitar plugins para ejecutar tareas programadas" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "Habilitar integración de eventos" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "Habilitar plugins para responder a eventos internos" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "Habilitar integración de interfaz" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "Habilitar complementos para integrar en la interfaz de usuario" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "Habilitar códigos de proyecto para rastrear proyectos" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "Excluir Ubicaciones Externas" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "Periodo de inventario automático" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "Mostrar nombres completos de los usuarios" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "Mostrar nombres completos de usuarios en lugar de nombres de usuario" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "Habilitar datos de estación de prueba" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "Habilitar la recolección de datos de estaciones de prueba para resultados de prueba" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "La parte está activa" msgid "Manufacturer is Active" msgstr "El fabricante está activo" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Fabricante" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Empresa" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "Tiene Stock" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Dirección" @@ -4163,7 +4195,7 @@ msgstr "Notas de envío para uso interno" msgid "Link to address information (external)" msgstr "Enlace a información de dirección (externa)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Parte del fabricante" @@ -4181,12 +4213,12 @@ msgstr "Seleccionar parte" msgid "Select manufacturer" msgstr "Seleccionar fabricante" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Número de parte de fabricante" @@ -4210,8 +4242,8 @@ msgstr "Las unidades de paquete deben ser mayor que cero" msgid "Linked manufacturer part must reference the same base part" msgstr "La parte vinculada del fabricante debe hacer referencia a la misma parte base" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Proveedor" msgid "Select supplier" msgstr "Seleccionar proveedor" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Unidad de mantenimiento de stock de proveedores" @@ -4258,8 +4290,8 @@ msgstr "costo base" msgid "Minimum charge (e.g. stocking fee)" msgstr "Cargo mínimo (p. ej., cuota de almacenamiento)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Paquetes" @@ -4307,14 +4339,18 @@ msgstr "Moneda predeterminada utilizada para este proveedor" msgid "Company Name" msgstr "Nombre de la empresa" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "En Stock" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "La columna ya fue mapeada a un campo de la base de datos" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "La columna no existe en el archivo de datos" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "El campo no existe en el modelo destino" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "El campo seleccionado es de solo lectura" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Sesión de importación" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Campo" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Columna" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Número de fila" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Datos de la fila original" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Errores" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Válido" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "Número de copias a imprimir para cada etiqueta" msgid "Connected" msgstr "Conectado" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Desconocido" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "Referencia del pedido" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Destacado" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "Tiene Precio" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Completado antes de" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Completado después de" @@ -4779,17 +4815,17 @@ msgstr "Completado después de" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "Orden" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Orden completada" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Componente interno" @@ -4797,27 +4833,27 @@ msgstr "Componente interno" msgid "Order Pending" msgstr "Orden pendiente" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Completados" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Tiene envío" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Orden de compra" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "Orden de compra" msgid "Sales Order" msgstr "Orden de Venta" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Descripción del pedido (opcional)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "Seleccione el código del proyecto para este pedido" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "Enlace a Url externa" @@ -4886,7 +4922,7 @@ msgstr "Fecha de inicio" msgid "Scheduled start date for this order" msgstr "Fecha de inicio programada para este pedido" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Fecha objetivo" @@ -4919,413 +4955,421 @@ msgstr "Punto de contacto para este pedido" msgid "Company address for this order" msgstr "Dirección de la empresa para este pedido" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "Referencia del pedido" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Estado" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "Estado de la orden de compra" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "Empresa de la cual se están encargando los artículos" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "Referencia del proveedor" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "Código de referencia de pedido del proveedor" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "recibido por" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "La fecha de pedido fue completada" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "Destinación" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "Destino para los artículos recibidos" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "El proveedor de la parte debe coincidir con el proveedor de PO" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "La partida no coincide con la orden de compra" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "La cantidad debe ser un número positivo" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "Empresa a la que se venden los artículos" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "Estado de la orden de venta" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "Referencia del cliente " -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "Código de referencia de pedido del cliente" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "Fecha de envío" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "enviado por" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "La orden ya fue completada" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "La orden ya fue cancelada" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "Sólo una orden abierta puede ser marcada como completa" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "El pedido no se puede completar porque hay envíos incompletos" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "El pedido no se puede completar ya que hay asignaciones incompletas" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "El pedido no se puede completar porque hay partidas incompletas" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "Este pedido está bloqueado y no puede ser modificado" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "Cantidad del artículo" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1822 msgid "Line item reference" msgstr "Referencia de partida" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "Notas de partida" -#: order/models.py:1822 +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Fecha objetivo para esta partida (dejar en blanco para usar la fecha de destino de la orden)" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "Descripción de partida (opcional)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "Contexto adicional para esta línea" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "Precio unitario" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "La parte del proveedor debe coincidir con el proveedor" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "Parte del proveedor" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "Recibido" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "Número de artículos recibidos" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Precio de Compra" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "Precio de compra unitario" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "Sólo las partes vendibles pueden ser asignadas a un pedido de venta" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Precio de Venta" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "Precio de venta unitario" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Enviado" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "Cantidad enviada" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "Fecha del envío" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "Fecha de entrega" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "Fecha de entrega del envío" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "Revisado por" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "Usuario que revisó este envío" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envío" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "Número de envío" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "Número de Seguimiento" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "Información de seguimiento del envío" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "Número de factura" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "Número de referencia para la factura asociada" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "El envío ya ha sido enviado" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "El envío no tiene artículos de stock asignados" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "El artículo de stock no ha sido asignado" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "No se puede asignar el artículo de stock a una línea con una parte diferente" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "No se puede asignar stock a una línea sin una parte" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La cantidad de asignación no puede exceder la cantidad de stock" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "Cantidad asignada debe ser mayor que cero" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "La cantidad debe ser 1 para el stock serializado" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "La orden de venta no coincide con el envío" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "El envío no coincide con el pedido de venta" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Línea" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "Referencia del envío del pedido de venta" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "Ítem" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "Seleccionar artículo de stock para asignar" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "Especificar la cantidad de asignación de stock" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "Referencia de la orden de devolución" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "Empresa de la cual se están devolviendo los artículos" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "Estado de la orden de devolución" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "Seleccionar el artículo a devolver del cliente" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "Fecha de recepción" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "Resultado" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "Salida para esta partida" -#: order/models.py:3072 +#: order/models.py:3101 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:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "Copiar líneas adicionales" msgid "Copy extra line items from the original order" msgstr "Copiar elementos extra de la línea del pedido original" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Copiar Parámetros" @@ -5372,216 +5416,216 @@ msgstr "Partidas" msgid "Completed Lines" msgstr "Líneas completadas" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Duplicar pedido" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Especificar opciones para duplicar este pedido" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "ID de pedido no válido" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Nombre del proveedor" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "El pedido no puede ser cancelado" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Permitir cerrar el pedido con partidas incompletas" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "El pedido tiene partidas incompletas" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "El pedido no está abierto" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Precio automático" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Calcular precio de compra automáticamente con base en los datos del proveedor" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Moneda del precio de compra" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Combinar artículos" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Número de parte interna" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Nombre interno de parte" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Debe especificar la parte del proveedor" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "La orden de compra debe especificarse" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "El proveedor debe coincidir con la orden de compra" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "La orden de compra debe coincidir con el proveedor" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Partida" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Seleccione la ubicación de destino para los artículos recibidos" -#: order/serializers.py:819 +#: order/serializers.py:862 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:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Fecha de Expiración" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Introduzca números de serie para artículos de almacén entrantes" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Código de barras escaneado" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Código de barras en uso" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Se deben proporcionar las partidas" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Se requiere ubicación de destino" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Los valores del código de barras deben ser únicos" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Envíos" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Envíos completados" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Moneda del precio de venta" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Elementos asignados" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "No se proporcionaron detalles de envío" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "La partida no está asociada con este pedido" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "La cantidad debe ser positiva" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Introduzca números de serie para asignar" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "El envío ya ha sido enviado" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "El envío no está asociado con este pedido" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "No se han encontrado coincidencias para los siguientes números de serie" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Los siguientes números de serie no están disponibles" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Partida de orden de devolución" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "La partida no coincide con la orden de devolución" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "La partida ya ha sido recibida" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Los artículos sólo pueden ser recibidos contra pedidos en curso" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Cantidad a devolver" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Moneda de precio de línea" @@ -5797,7 +5841,7 @@ msgstr "Palabras clave por defecto para partes en esta categoría" msgid "Icon" msgstr "Icono" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Icono (opcional)" @@ -5818,7 +5862,7 @@ msgstr "Valor predeterminado" msgid "Default Parameter Value" msgstr "Valor de parámetro por defecto" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Partes" @@ -5933,7 +5977,7 @@ msgstr "Palabras clave para mejorar la visibilidad en los resultados de búsqued msgid "Part category" msgstr "Categoría de parte" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" @@ -5942,7 +5986,7 @@ msgstr "IPN" msgid "Part revision or version number" msgstr "Revisión de parte o número de versión" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Revisión" @@ -5966,7 +6010,7 @@ msgstr "Expiración por defecto" msgid "Expiry time (in days) for stock items of this part" msgstr "Tiempo de expiración (en días) para los artículos de stock de esta parte" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Stock mínimo" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Categoría principal de parte" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Subcategorías" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Moneda de compra de ítem de stock" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Parte original" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Seleccione la parte original a duplicar" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Copiar Imagen" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Copiar imagen desde la parte original" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Copiar BOM" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Copiar la factura de materiales de la parte original" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Copiar datos del parámetro de la parte original" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Cantidad Inicial de Stock" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Seleccione proveedor (o déjelo en blanco para saltar)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleccionar fabricante (o dejar en blanco para saltar)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Número de parte del fabricante" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "La empresa seleccionada no es un proveedor válido" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "La empresa seleccionada no es un fabricante válido" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Nombre de categoría" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "En construcción" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Elementos de stock" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Inventario Total" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Duplicar Parte" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Stock Inicial" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Crear Parte con cantidad inicial de stock" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Información del proveedor" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Añadir información inicial del proveedor para esta parte" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Copiar Parámetros de Categoría" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Copiar plantillas de parámetro de la categoría de partes seleccionada" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Imagen Existente" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "El archivo de imagen no existe" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Validación de Lista de Materiales" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Puede construir" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Precio mínimo" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Anular el valor calculado para precio mínimo" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Precio mínimo de moneda" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Precio máximo" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Precio máximo de moneda" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Actualizar" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 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:1531 +#: part/serializers.py:1563 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:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Seleccionar parte de la que copiar BOM" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Eliminar Datos Existentes" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Eliminar artículos BOM existentes antes de copiar" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Incluye Heredado" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Incluye artículos BOM que son heredados de partes con plantillas" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Omitir filas no válidas" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Activar esta opción para omitir filas inválidas" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Copiar partes sustitutas" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "El complemento no está instalado" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Instalación del complemento no encontrada" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "Instalación no confirmada" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Activar complemento" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Activar este complemento" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "Dimensiones de etiqueta inválidas" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "Carta" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "Nombre de la plantilla" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "Adjuntar al modelo al imprimir" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "Guardar la salida del informe como un archivo adjunto contra la instancia del modelo enlazado al imprimir" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "Patrón de Nombre de archivo" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Filtros" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "Tamaño de página para reportes PDF" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Ancho [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "Ancho de la etiqueta, especificado en mm" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Altura [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "Altura de la etiqueta, especificada en mm" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "Fragmento" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "Archivo fragmento de informe" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "Descripción de archivo de fragmento" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "Activo" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "Reportar archivo de activos" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "Descripción del archivo de activos" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "Selecciona la plantilla de etiqueta" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "Complemento de impresión" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "Selecciona el complemento a usar para imprimir etiquetas" @@ -8231,7 +8292,7 @@ msgstr "Artículo Stock Informe de prueba" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Elementos instalados" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Ubicación principal" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Desactualizado" @@ -8522,7 +8583,7 @@ msgstr "Se debe especificar la pieza" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "Seleccione una parte del proveedor correspondiente para este artículo d msgid "Where is this stock item located?" msgstr "¿Dónde se encuentra este artículo de stock?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Empaquetar este artículo de stock se almacena en" @@ -8583,7 +8644,7 @@ msgstr "¿Está este artículo instalado en otro artículo?" msgid "Serial number for this item" msgstr "Número de serie para este artículo" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Código de lote para este artículo de stock" @@ -8696,7 +8757,7 @@ msgstr "El artículo de stock está en producción" msgid "Serialized stock cannot be merged" msgstr "Stock serializado no puede ser combinado" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Artículos de Stock Duplicados" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "Elemento padre" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Introduzca números de serie para nuevos artículos" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Número de pieza del proveedor" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Expirado" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Elementos secundarios" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Introduzca el número de artículos de stock para serializar" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "La cantidad no debe exceder la cantidad disponible de stock ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Ubicación de stock de destino" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Los números de serie no se pueden asignar a esta parte" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Números de serie ya existen" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Añadir nota de transacción (opcional)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Sub-ubicación" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "La parte debe ser vendible" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "El artículo está asignado a una orden de venta" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "El artículo está asignado a una orden de creación" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Cliente para asignar artículos de stock" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "La empresa seleccionada no es un cliente" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Notas de asignación de stock" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Debe proporcionarse una lista de artículos de stock" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Notas de fusión de stock" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Permitir proveedores no coincidentes" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Permitir fusionar artículos de stock con diferentes partes de proveedor" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Permitir estado no coincidente" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Permitir fusionar artículos de stock con diferentes códigos de estado" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Debe proporcionar al menos dos artículos de stock" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Sin cambios" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Valor de clave primaria de Stock" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "No hay existencias del artículo" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Notas de transacción de stock" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "Órdenes de venta" msgid "Return Orders" msgstr "Ordenes de devolución" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Nombre de usuario" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Nombre" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Nombre del usuario" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Apellido" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Apellido del usuario" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Dirección de correo del usuario" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Personal" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Tiene este usuario permisos de personal" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superusuario" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Es este usuario un superusuario" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Esta cuenta de usuario está activa" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Su cuenta ha sido creada." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Por favor, utilice la función de restablecer la contraseña para iniciar sesión" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Bienvenido a InvenTree" diff --git a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po index 156ee6d552..9be143b44f 100644 --- a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Spanish, Mexico\n" "Language: es_MX\n" @@ -49,7 +49,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "El usuario no tiene permiso para ver este modelo" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "No se pudo convertir {original} a {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Cantidad proporcionada no válida" @@ -104,13 +104,13 @@ msgstr "Ingrese la fecha" msgid "Invalid decimal value" msgstr "Número decimal inválido" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Notas" @@ -123,75 +123,91 @@ msgstr "El valor '{name}' no aparece en formato de patrón" msgid "Provided value does not match required pattern: " msgstr "El valor proporcionado no coincide con el patrón requerido: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "No se puede serializar más de 1000 artículos a la vez" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "No se ha proporcionado un número de serie" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Serie duplicada" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Grupo inválido: {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Rango del grupo {group} supera la cantidad permitida ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Numeros de serie no encontrados" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "La cantidad de números de serie únicos ({n}) deben coincidir la cantidad ({q})" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Eliminar etiquetas HTML de este valor" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "Los datos contienen contenido de markdown prohibido" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Error de conexión" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "El servidor respondió con código de estado no válido" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Se ha producido una excepción" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "El servidor respondió con un valor de longitud de contenido inválido" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "El tamaño de la imagen es demasiado grande" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "La descarga de imagen excedió el tamaño máximo" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "El servidor remoto devolvió una respuesta vacía" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "La URL proporcionada no es un archivo de imagen válido" @@ -199,7 +215,7 @@ msgstr "La URL proporcionada no es un archivo de imagen válido" msgid "Log in to the app" msgstr "Iniciar sesión en la aplicación" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Correo electrónico" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Selección no válida" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nombre" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Descripción" msgid "Description (optional)" msgstr "Descripción (opcional)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Ruta" @@ -320,51 +336,51 @@ msgstr "Se ha registrado un error por el servidor." msgid "Image" msgstr "Imágen" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Debe ser un número válido" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Moneda" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Seleccionar moneda de las opciones disponibles" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Imagen remota" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL de imagen remota" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "La descarga de imágenes desde la URL remota no está habilitada" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Error al descargar la imagen desde la URL remota" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "Chino (Simplificado)" msgid "Chinese (Traditional)" msgstr "Chino (Tradicional)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "Unidad física inválida" msgid "Not a valid currency code" msgstr "No es un código de moneda válido" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Estado del pedido" @@ -545,21 +561,21 @@ msgstr "Estado del pedido" msgid "Parent Build" msgstr "Construcción o Armado Superior" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Incluye Variantes" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "Incluye Variantes" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "Incluye Variantes" msgid "Part" msgstr "Parte" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoría" @@ -653,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "La compilación debe cancelarse antes de poder ser eliminada" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Consumible" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Opcional" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Montaje" @@ -671,32 +687,32 @@ msgstr "Montaje" msgid "Tracked" msgstr "Rastreado" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Comprobable" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Pedido pendiente" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Asignadas" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponible" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "En pedido" @@ -704,26 +720,26 @@ msgstr "En pedido" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Construir órden" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Ubicación" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "Número de orden de construcción o armado" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Referencia de orden de venta" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Ubicación de la fuente" @@ -845,16 +861,16 @@ msgstr "Estado de la construcción" msgid "Build status code" msgstr "Código de estado de construcción" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Numero de lote" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Número de lote de este producto final" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Fecha de Creación" @@ -875,7 +891,7 @@ msgstr "Fecha límite de finalización" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Fecha límite para la finalización de la construcción. La construcción estará vencida después de esta fecha." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Fecha de finalización" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Prioridad de esta orden de construcción" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Código del proyecto" @@ -948,7 +964,7 @@ msgstr "El pedido {build} ha sido procesado" msgid "A build order has been completed" msgstr "Pedido #[order] ha sido procesado" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Los números de serie deben ser proporcionados para las partes rastreables" @@ -964,23 +980,23 @@ msgstr "La construcción de la salida ya está completa" msgid "Build output does not match Build Order" msgstr "La salida de la construcción no coincide con el orden de construcción" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "La cantidad debe ser mayor que cero" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "La cantidad no puede ser mayor que la cantidad de salida" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "La construcción {serial} no ha pasado todas las pruebas requeridas" @@ -1001,10 +1017,10 @@ msgstr "Construir línea de pedido" msgid "Build object" msgstr "Ensamblar equipo" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Ensamblar equipo" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "La cantidad debe ser 1 para el stock serializado" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Cantidad asignada ({q}) no debe exceder la cantidad disponible de stock ({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "Artículo de stock sobreasignado" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Artículo de stock" @@ -1083,378 +1099,378 @@ msgstr "Artículo de stock de destino" msgid "Build Level" msgstr "Nivel de construcción" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Nombre de parte" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "La salida de construcción no coincide con la construcción padre" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "La parte de salida no coincide con la parte de la Orden de Construcción" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Esta salida de construcción ya ha sido completada" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Esta salida de construcción no está completamente asignada" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Ingrese la cantidad para la producción de la construcción" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Cantidad entera requerida para partes rastreables" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Cantidad entera requerida, ya que la factura de materiales contiene partes rastreables" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Números de serie" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Introduzca los números de serie de salidas de construcción" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Ubicación de stock para objetos construidos" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Autoasignar Números de Serie" -#: build/serializers.py:378 +#: build/serializers.py:385 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:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Los siguientes números seriales ya existen o son inválidos" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Debe proporcionarse una lista de salidas de construcción" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Ubicación de almacén para salidas descartadas" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Descartar asignaciones" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar cualquier asignación de existencias para las salidas descartadas" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Razón para descartar la salida de ensamble(s)" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Ubicación para las salidas de construcción completadas" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Aceptar Asignación Incompleta" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Completar salidas si el inventario no se ha asignado completamente" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Consumir Stock Asignado" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Consume cualquier stock que ya ha sido asignado a esta construcción" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Eliminar salidas incompletas" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Eliminar cualquier salida de construcción que no se haya completado" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "No permitido" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Aceptar como consumido por este pedido de construcción" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Liberar antes de completar esta orden de construcción" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Stock sobreasignado" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Cómo quieres manejar los artículos extra de inventario asignados a la orden de construcción" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Algunos artículos de inventario han sido sobreasignados" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Aceptar no asignado" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Aceptar que los artículos de stock no se han asignado completamente a este pedido de construcción" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "El stock requerido no ha sido completamente asignado" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Aceptar incompleto" -#: build/serializers.py:793 +#: build/serializers.py:800 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:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "La cantidad de construcción requerida aún no se ha completado" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "La orden de construcción tiene órdenes hijas de construcción abiertas" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Orden de construcción debe estar en estado de producción" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "El orden de construcción tiene salidas incompletas" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Linea de ensamble" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "La salida de la construcción debe apuntar a la misma construcción" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Crear partida" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part debe apuntar a la misma parte que la orden de construcción" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "El artículo debe estar en stock" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Cantidad disponible ({q}) excedida" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "La salida de la construcción debe especificarse para la asignación de partes rastreadas" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "La salida de construcción no se puede especificar para la asignación de partes no rastreadas" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Debe proporcionarse la adjudicación de artículos" -#: build/serializers.py:1087 +#: build/serializers.py:1094 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:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Excluir ubicación" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Excluir artículos de stock de esta ubicación seleccionada" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Stock intercambiable" -#: build/serializers.py:1103 +#: build/serializers.py:1110 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:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Sustituir stock" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Permitir la asignación de partes sustitutas" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Elementos opcionales" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Asignar artículos de la BOM opcionales para construir la orden" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Referencia BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "ID de la parte BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Nombre de parte la BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Parte del proveedor" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Cantidad Asignada" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Referencia de orden de Ensamblado" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Nombre de la categoría por pieza" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Rastreable" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Heredado" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Item de Lista de Materiales" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "En producción" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Stock externo" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Stock Disponible" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Stock sustituto disponible" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Stock variable disponible" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "En espera" msgid "Cancelled" msgstr "Cancelado" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "Orden de construcción atrasada" msgid "Build order {bo} is now overdue" msgstr "El pedido de construcción {bo} está atrasado" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "¿Es enlace?" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "¿Es archivo?" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "El usuario no tiene permiso para eliminar estos adjuntos" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "El usuario no tiene permiso para eliminar este adjunto" @@ -1534,11 +1550,11 @@ msgstr "No se han proporcionado códigos de divisa válidos" msgid "No plugin" msgstr "Sin plugin" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Etiqueta del código del proyecto" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Actualizado" @@ -1600,7 +1616,7 @@ msgstr "Cadena de clave debe ser única" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Usuario" msgid "Price break quantity" msgstr "Cantidad de salto de precio" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Precio" @@ -1633,10 +1649,10 @@ msgstr "Punto final en el que se recibe este webhook" msgid "Name for this webhook" msgstr "Nombre para este webhook" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Activo" @@ -1660,11 +1676,11 @@ msgstr "Clave" msgid "Shared secret for HMAC" msgstr "Secreto compartido para HMAC" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "ID de mensaje" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "Identificador único para este mensaje" @@ -1714,7 +1730,7 @@ msgstr "Título" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Autor" msgid "Summary" msgstr "Resumen" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Leer" @@ -1797,7 +1813,7 @@ msgstr "Archivo no encontrado" msgid "Missing external link" msgstr "Falta enlace externo" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "Tamaño del archivo" msgid "File size in bytes" msgstr "Tamaño del archivo en bytes" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Tipo de modelo no válido especificado para el archivo adjunto" @@ -1861,7 +1877,7 @@ msgstr "Llave lógica" msgid "State logical key that is equal to this custom state in business logic" msgstr "Clave lógica del estado que es igual a este estado personalizado en la lógica de negocios" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Valor" @@ -1874,7 +1890,7 @@ msgstr "Valor numérico que se guardará en la base de datos de modelos" msgid "Name of the state" msgstr "Nombre del estado" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Etiqueta" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "Lista de selección" @@ -1982,7 +1998,7 @@ msgstr "Entrada por defecto" msgid "Default entry for this selection list" msgstr "Entrada predeterminada para esta lista de selección" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Creado" @@ -1998,334 +2014,334 @@ msgstr "Última actualización" msgid "Date and time that the selection list was last updated" msgstr "Fecha y hora en que la lista de selección fue actualizada por última vez" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "Entrada de lista de selección" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "Entradas de la lista de selección" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "Lista de selección a la que pertenece esta entrada" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "Valor del elemento de la lista de selección" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "Etiqueta para la entrada de lista de selección" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "Descripción de la entrada de lista de selección" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "¿Está activa esta entrada de la lista de selección?" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "Plantilla de parámetro" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "El nombre de parámetro en la plantilla tiene que ser único" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "Nombre de Parámetro" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "Unidades" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "Casilla de verificación" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "¿Es este parámetro una casilla de verificación?" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "Opciones" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "Opciones válidas para este parámetro (separados por comas)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "Lista de selección para este parámetro" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "Opción inválida para el valor del parámetro" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Plantilla" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Datos" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "Valor del parámetro" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Nota" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Campo de nota opcional" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "Escanear código de barras" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "Datos de código de barras" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "Usuario que escaneó el código de barras" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "Fecha y hora del escaneo de código de barras" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "Dispositivo URL que procesó el código de barras" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "Datos de contexto para el escaneo de código de barras" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "Respuesta" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "Respuesta de datos del escaneo de código de barras" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Resultado" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "¿El escaneo de código de barras fue exitoso?" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Clave" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Está en ejecución" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Tareas pendientes" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Tareas Programadas" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Tareas fallidas" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Identificación de Tarea" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Identificación de tarea única" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Bloquear" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Bloquear hora" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Nombre de la tarea" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Función" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Nombre de la Función" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumentos" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Argumentos de la tarea" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Argumentos de palabra clave" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Argumentos de palabra clave de tarea" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Nombre de Archivo" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Lista de selección bloqueada" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Sin grupo" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "La URL del sitio está bloqueada por su configuración" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Reinicio requerido" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Se ha cambiado una configuración que requiere un reinicio del servidor" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Migraciones pendientes" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Número de migraciones de base de datos pendientes" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Nombre de la instancia del servidor" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Descriptor de cadena para la instancia del servidor" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Usar nombre de instancia" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Utilice el nombre de la instancia en la barra de título" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Restringir mostrar 'acerca de'" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Mostrar la modal `about` solo para superusuarios" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nombre de empresa" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "Nombre interno de empresa" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "URL Base" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "URL base para la instancia del servidor" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Moneda predeterminada" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "Seleccione la moneda base para los cálculos de precios" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "Monedas admitidas" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "Listado de códigos de divisa soportados" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "Intervalo de actualización de moneda" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Con qué frecuencia actualizar los tipos de cambio (establecer a cero para desactivar)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "días" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "Plugin de Actualización de Moneda" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "Plugin de actualización de moneda a usar" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "Descargar desde URL" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "Permitir la descarga de imágenes y archivos remotos desde la URL externa" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "Límite de tamaño de descarga" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "Tamaño máximo de descarga permitido para la imagen remota" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "Agente de usuario usado para descargar desde la URL" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Permitir reemplazar el agente de usuario utilizado para descargar imágenes y archivos desde URL externa (dejar en blanco para el valor predeterminado)" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "Validación estricta de URL" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "Requerir especificación de esquema al validar URLs" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "Actualizar intervalo de actualización" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "Con qué frecuencia comprobar actualizaciones (establecer a cero para desactivar)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Copia de seguridad automática" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "Activar copia de seguridad automática de los archivos de base de datos y medios" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "Intervalo de respaldo automático" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "Especificar número de días entre eventos automatizados de copia de seguridad" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "Intervalo de eliminación de tareas" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "Los resultados de las tareas en segundo plano se eliminarán después del número especificado de días" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "Intervalo de eliminación de registro de errores" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "Los registros de errores se eliminarán después del número especificado de días" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "Intervalo de eliminación de notificaciones" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "Las notificaciones de usuario se eliminarán después del número especificado de días" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Soporte de código de barras" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "Habilitar el soporte para escáner de códigos de barras en la interfaz web" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "Guardar resultados de código de barras" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "Guardar resultados de código de barras en la base de datos" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "Número máximo de escaneos de código de barras" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "Número máximo de resultados de escaneo de código de barras para almacenar" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "Retraso de entrada de código de barras" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "Tiempo de retraso en la lectura de códigos de barras" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "Soporte para Webcam de código de barras" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "Permitir escaneo de código de barras a través de webcam en el navegador" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "Mostrar datos del código de barra como texto en el navegador" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "Complemento para generar códigos de barra" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "Complemento a usar para la generación de datos de códigos de barra internos" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "Revisiones de partes" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "Habilitar campo de revisión para parte" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "Patrón de expresión regular para IPN de la parte coincidente" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "Permitir IPN duplicado" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "Permitir que varias partes compartan el mismo IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "Permitir editar IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "Permite cambiar el valor de IPN mientras se edita una parte" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "Copiar parte de datos BOM" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "Copiar datos BOM por defecto al duplicar una parte" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "Copiar parámetros de parte" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "Copiar datos de parámetro por defecto al duplicar una parte" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "Copiar parte de datos de prueba" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "Copiar datos de parámetro por defecto al duplicar una parte" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "Copiar plantillas de parámetros de categoría" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "Copiar plantillas de parámetros de categoría al crear una parte" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "Las partes son plantillas por defecto" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "Las partes pueden ser ensambladas desde otros componentes por defecto" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Componente" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "Las partes pueden ser usadas como subcomponentes por defecto" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Comprable" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "Las partes son comprables por defecto" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Vendible" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "Las partes se pueden vender por defecto" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "Las partes son rastreables por defecto" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Virtual" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "Las partes son virtuales por defecto" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "Mostrar partes relacionadas" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "Mostrar partes relacionadas para una parte" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "Datos iniciales de existencias" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "Permitir la creación del stock inicial al añadir una nueva parte" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "Datos iniciales del proveedor" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Permitir la creación de datos iniciales del proveedor al agregar una nueva parte" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "Formato de visualización de Nombre de Parte" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "Formato para mostrar el nombre de la parte" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "Icono por defecto de la categoría de parte" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "Icono por defecto de la categoría de parte (vacío significa que no hay icono)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "Mínimo de lugares decimales en el precio" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Número mínimo de decimales a mostrar al procesar los datos de precios" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "Máximo de lugares decimales en el precio" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Número máximo de decimales a mostrar al procesar los datos de precios" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "Usar precios de proveedor" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Incluir descuentos de precios del proveedor en los cálculos generales de precios" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "Anulación del historial de compra" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "El precio histórico de compra anula los descuentos de precios del proveedor" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "Usar precio del artículo de almacén" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Usar los precios de los datos de inventario introducidos manualmente para los cálculos de precios" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "Edad del precio del artículo de almacén" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Excluir artículos de almacén anteriores a este número de días de los cálculos de precios" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "Usar precios variantes" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "Incluir variantes de precios en los cálculos generales de precios" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "Solo variantes activas" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "Usar solo partes de variantes activas para calcular los precios de variantes" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "Intervalo de reconstrucción de precios" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "Número de días antes de que el precio de la parte se actualice automáticamente" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Precios internos" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "Habilitar precios internos para partes" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "Anulación del precio interno" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "Si está disponible, los precios internos anulan los cálculos del rango de precios" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "Habilitar impresión de etiquetas" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "Habilitar impresión de etiquetas desde la interfaz web" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "PPP de la imagen de etiqueta" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Resolución DPI al generar archivos de imagen que suministrar para etiquetar complementos de impresión" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Habilitar informes" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "Habilitar generación de informes" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "Modo de depuración" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "Generar informes en modo de depuración (salida HTML)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "Registrar errores de reportes" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "Registrar errores ocurridos al generar reportes" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Tamaño de página" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "Tamaño de página predeterminado para informes PDF" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "Forzar unidades de parámetro" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "Si se proporcionan unidades, los valores de parámetro deben coincidir con las unidades especificadas" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "Seriales únicos globalmente" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "Los números de serie para los artículos de inventario deben ser únicos globalmente" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "Eliminar existencias agotadas" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "Determina el comportamiento por defecto al agotarse un artículo del inventario" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "Plantilla de código de lote" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "Plantilla para generar códigos de lote por defecto para artículos de almacén" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "Expiración de stock" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "Habilitar la funcionalidad de expiración de stock" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "Vender existencias caducadas" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "Permitir venta de existencias caducadas" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "Tiempo histórico de Stock" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "Número de días de artículos de stock se consideran obsoletos antes de caducar" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "Crear Stock Caducado" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "Permitir crear con stock caducado" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "Control de Stock" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "Habilitar control de propiedad sobre ubicaciones de stock y artículos" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "Icono por defecto de ubicación de almacén" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "Icono por defecto de ubicación de almacén (vacío significa que no hay icono)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "Mostrar Articulos de Stock Instalados" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "Mostrar los artículos de stock instalados en las tablas de stock" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "Revisar BOM al instalar artículos" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Los elementos de stock instalados deben existir en la BOM para la parte padre" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "Permitir transferencia Sin Existencias" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Permitir que artículos del inventario sin existencias puedan ser transferidos entre ubicaciones de inventario" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "Patrón de Referencia de Ordenes de Armado" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "Patrón requerido para generar el campo de referencia de la Orden de Ensamblado" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "Requerir Dueño Responsable" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "Se debe asignar un dueño responsable a cada orden" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "Requerir Parte Activa" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "Impedir la creación de órdenes de fabricación para partes inactivas" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "Requerir Parte Bloqueada" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "Impedir la creación de órdenes de fabricación para partes bloqueadas" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "Impedir la creación de órdenes de fabricación a menos que se haya validado la lista de materiales" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "Prevenir la finalización de la orden de construcción hasta que todas las órdenes hijas estén cerradas" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Bloquear hasta que los Tests pasen" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Evitar que las construcciones sean completadas hasta que todas las pruebas requeridas pasen" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "Habilitar órdenes de devolución" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "Habilitar la funcionalidad de orden de devolución en la interfaz de usuario" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "Patrón de referencia de orden de devolución" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "Patrón requerido para generar el campo de referencia de devolución de la orden" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "Editar ordenes de devolución completadas" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "Permitir la edición de ordenes de devolución después de que hayan sido completados" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "Patrón de Referencia de Ordenes de Venta" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "Patrón requerido para generar el campo de referencia de la orden de venta" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "Envío Predeterminado de Ordenes de Venta" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "Habilitar la creación de envío predeterminado con ordenes de entrega" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "Editar Ordenes de Venta Completados" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Permitir la edición de ordenes de venta después de que hayan sido enviados o completados" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "Marcar pedidos enviados como completados" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Los pedidos marcados como enviados se completarán automáticamente, evitando el estado de \"envío\"" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "Patrón de Referencia de Orden de Compra" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "Patrón requerido para generar el campo de referencia de la Orden de Compra" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "Editar Ordenes de Compra Completados" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Permitir la edición de órdenes de venta después de que hayan sido enviados o completados" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "Autocompletar Ordenes de compra" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Marcar automáticamente las órdenes de compra como completas cuando se reciben todos los artículos de línea" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Habilitar función de contraseña olvidada" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "Activar la función olvido de contraseña en las páginas de inicio de sesión" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Habilitar registro" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "Activar auto-registro para usuarios en las páginas de inicio de sesión" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "Habilitar SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "Habilitar SSO en las páginas de inicio de sesión" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "Habilitar registro SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Activar autoregistro a través de SSO para usuarios en las páginas de inicio de sesión" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "Habilitar sincronización de grupo SSO" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Habilitar la sincronización de grupos de Inventree con grupos proporcionados por el IdP" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "Clave de grupo SSO" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "El nombre del atributo reclamado por el grupo proporcionado por el IdP" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "Mapa del grupo SSO" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Un mapeo de grupos SSO a grupos de Inventree locales. Si el grupo local no existe, se creará." -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "Eliminar grupos fuera de SSO" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "Email requerido" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "Requiere usuario para suministrar correo al registrarse" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "Auto-rellenar usuarios SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "Rellenar automáticamente los datos de usuario de la cuenta SSO" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "Correo dos veces" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "Al registrarse pregunte dos veces a los usuarios por su correo" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Contraseña dos veces" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "Al registrarse, preguntar dos veces a los usuarios por su contraseña" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "Dominios permitidos" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Restringir el registro a ciertos dominios (separados por comas, comenzando por @)" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "Grupo al registrarse" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Grupo al que se asignan nuevos usuarios al registrarse. Si la sincronización de grupo SSO está activada, este grupo sólo se establece si no se puede asignar ningún grupo desde el IdP." -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "Forzar MFA" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "Los usuarios deben utilizar seguridad multifactor." -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "Comprobar complementos al iniciar" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Comprobar que todos los complementos están instalados en el arranque - habilitar en entornos de contenedores" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "Revisar actualizaciones del plugin" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "Habilitar comprobaciones periódicas para actualizaciones de plugins instalados" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "Habilitar integración de URL" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "Habilitar plugins para añadir rutas de URL" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "Habilitar integración de navegación" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "Habilitar plugins para integrar en la navegación" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "Habilitar integración de la aplicación" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "Habilitar plugins para añadir aplicaciones" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "Habilitar integración de programación" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "Habilitar plugins para ejecutar tareas programadas" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "Habilitar integración de eventos" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "Habilitar plugins para responder a eventos internos" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "Habilitar integración de interfaz" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "Habilitar complementos para integrar en la interfaz de usuario" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "Excluir Ubicaciones Externas" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "Periodo de inventario automático" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "Mostrar nombres completos de los usuarios" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "Mostrar nombres completos de usuarios en lugar de nombres de usuario" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "Habilitar datos de estación de prueba" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "Habilitar la recolección de datos de estaciones de prueba para resultados de prueba" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Fabricante" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Empresa" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "Tiene existencias" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Dirección" @@ -4163,7 +4195,7 @@ msgstr "Notas de envío para uso interno" msgid "Link to address information (external)" msgstr "Enlace a información de dirección (externa)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Parte del fabricante" @@ -4181,12 +4213,12 @@ msgstr "Seleccionar parte" msgid "Select manufacturer" msgstr "Seleccionar fabricante" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Número de parte de fabricante" @@ -4210,8 +4242,8 @@ msgstr "Las unidades de paquete deben ser mayor que cero" msgid "Linked manufacturer part must reference the same base part" msgstr "La parte vinculada del fabricante debe hacer referencia a la misma parte base" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Proveedor" msgid "Select supplier" msgstr "Seleccionar proveedor" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Unidad de mantenimiento de stock de proveedores" @@ -4258,8 +4290,8 @@ msgstr "costo base" msgid "Minimum charge (e.g. stocking fee)" msgstr "Cargo mínimo (p. ej., cuota de almacenamiento)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Paquetes" @@ -4307,14 +4339,18 @@ msgstr "Moneda predeterminada utilizada para este proveedor" msgid "Company Name" msgstr "Nombre de la empresa" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "En Stock" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "La columna ya fue mapeada a un campo de la base de datos" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "La columna no existe en el archivo de datos" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "El campo no existe en el modelo destino" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "El campo seleccionado es de solo lectura" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Sesión de importación" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Campo" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Columna" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Número de fila" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Datos de la fila original" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Errores" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Válido" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "Número de copias a imprimir para cada etiqueta" msgid "Connected" msgstr "Conectado" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Desconocido" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "Referencia del pedido" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Destacado" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "Tiene Precio" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Completado antes de" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Completado después de" @@ -4779,17 +4815,17 @@ msgstr "Completado después de" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "Orden" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Orden completada" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Componente interno" @@ -4797,27 +4833,27 @@ msgstr "Componente interno" msgid "Order Pending" msgstr "Orden pendiente" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Completados" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Tiene envío" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Orden de compra" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "Orden de compra" msgid "Sales Order" msgstr "Orden de Venta" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Descripción del pedido (opcional)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "Seleccione el código del proyecto para este pedido" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "Enlace a Url externa" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Fecha objetivo" @@ -4919,413 +4955,421 @@ msgstr "Punto de contacto para este pedido" msgid "Company address for this order" msgstr "Dirección de la empresa para este pedido" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "Referencia del pedido" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Estado" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "Estado de la orden de compra" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "Empresa de la cual se están encargando los artículos" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "Referencia del proveedor" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "Código de referencia de pedido del proveedor" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "recibido por" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "La fecha de pedido fue completada" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "Destinación" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "Destino para los artículos recibidos" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "El proveedor de la parte debe coincidir con el proveedor de PO" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "La partida no coincide con la orden de compra" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "La cantidad debe ser un número positivo" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "Empresa a la que se venden los artículos" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "Estado de la orden de venta" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "Referencia del cliente " -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "Código de referencia de pedido del cliente" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "Fecha de envío" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "enviado por" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "La orden ya fue completada" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "La orden ya fue cancelada" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "Sólo una orden abierta puede ser marcada como completa" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "El pedido no se puede completar porque hay envíos incompletos" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "El pedido no se puede completar ya que hay asignaciones incompletas" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "El pedido no se puede completar porque hay partidas incompletas" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "Cantidad del artículo" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1822 msgid "Line item reference" msgstr "Referencia de partida" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "Notas de partida" -#: order/models.py:1822 +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Fecha objetivo para esta partida (dejar en blanco para usar la fecha de destino de la orden)" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "Descripción de partida (opcional)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "Contexto adicional para esta línea" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "Precio unitario" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "La parte del proveedor debe coincidir con el proveedor" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "Parte del proveedor" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "Recibido" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "Número de artículos recibidos" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Precio de Compra" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "Precio de compra unitario" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "Sólo las partes vendibles pueden ser asignadas a un pedido de venta" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Precio de Venta" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "Precio de venta unitario" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Enviado" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "Cantidad enviada" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "Fecha del envío" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "Fecha de entrega" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "Fecha de entrega del envío" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "Revisado por" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "Usuario que revisó este envío" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envío" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "Número de envío" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "Número de Seguimiento" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "Información de seguimiento del envío" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "Número de factura" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "Número de referencia para la factura asociada" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "El envío ya ha sido enviado" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "El envío no tiene artículos de stock asignados" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "El artículo de stock no ha sido asignado" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "No se puede asignar el artículo de stock a una línea con una parte diferente" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "No se puede asignar stock a una línea sin una parte" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La cantidad de asignación no puede exceder la cantidad de stock" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "Cantidad asignada debe ser mayor que cero" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "La cantidad debe ser 1 para el stock serializado" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "La orden de venta no coincide con el envío" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "El envío no coincide con el pedido de venta" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Línea" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "Referencia del envío del pedido de venta" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "Ítem" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "Seleccionar artículo de stock para asignar" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "Especificar la cantidad de asignación de stock" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "Referencia de la orden de devolución" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "Empresa de la cual se están devolviendo los artículos" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "Estado de la orden de devolución" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "El artículo de almacén debe ser especificado" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "La cantidad de retorno excede la cantidad de existencias" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "La cantidad de retorno debe ser mayor que cero" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "Cantidad inválida para el artículo de stock serializado" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "Seleccionar el artículo a devolver del cliente" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "Fecha de recepción" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "Resultado" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "Salida para esta partida" -#: order/models.py:3072 +#: order/models.py:3101 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:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "Copiar líneas adicionales" msgid "Copy extra line items from the original order" msgstr "Copiar partidas extra del pedido original" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Copiar Parámetros" @@ -5372,216 +5416,216 @@ msgstr "Partidas" msgid "Completed Lines" msgstr "Líneas completadas" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Duplicar pedido" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Especificar opciones para duplicar este pedido" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "ID de pedido inválido" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Nombre del proveedor" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "El pedido no puede ser cancelado" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Permitir cerrar el pedido con partidas incompletas" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "El pedido tiene partidas incompletas" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "El pedido no está abierto" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Precio automático" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Calcular precio de compra automáticamente con base en los datos del proveedor" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Moneda del precio de compra" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Combinar artículos" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Número de parte interna" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Nombre interno de parte" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Debe especificar la parte del proveedor" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "La orden de compra debe especificarse" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "El proveedor debe coincidir con la orden de compra" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "La orden de compra debe coincidir con el proveedor" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Partida" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Seleccione la ubicación de destino para los artículos recibidos" -#: order/serializers.py:819 +#: order/serializers.py:862 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:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Fecha de Expiración" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Introduzca números de serie para artículos de almacén entrantes" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Código de barras escaneado" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Código de barras en uso" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Se deben proporcionar las partidas" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Se requiere ubicación de destino" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Los valores del código de barras deben ser únicos" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Envíos" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Envíos completados" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Moneda del precio de venta" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Elementos asignados" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "No se proporcionaron detalles de envío" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "La partida no está asociada con este pedido" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "La cantidad debe ser positiva" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Introduzca números de serie para asignar" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "El envío ya ha sido enviado" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "El envío no está asociado con este pedido" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "No se han encontrado coincidencias para los siguientes números de serie" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Los siguientes números de serie no están disponibles" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Partida de orden de devolución" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "La partida no coincide con la orden de devolución" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "La partida ya ha sido recibida" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Los artículos sólo pueden ser recibidos contra pedidos en curso" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Cantidad a devolver" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Moneda de precio de línea" @@ -5797,7 +5841,7 @@ msgstr "Palabras clave por defecto para partes en esta categoría" msgid "Icon" msgstr "Icono" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Icono (opcional)" @@ -5818,7 +5862,7 @@ msgstr "Valor predeterminado" msgid "Default Parameter Value" msgstr "Valor de parámetro por defecto" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Partes" @@ -5933,7 +5977,7 @@ msgstr "Palabras clave para mejorar la visibilidad en los resultados de búsqued msgid "Part category" msgstr "Categoría de parte" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" @@ -5942,7 +5986,7 @@ msgstr "IPN" msgid "Part revision or version number" msgstr "Revisión de parte o número de versión" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Revisión" @@ -5966,7 +6010,7 @@ msgstr "Expiración por defecto" msgid "Expiry time (in days) for stock items of this part" msgstr "Tiempo de expiración (en días) para los artículos de stock de esta parte" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Stock mínimo" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Categoría principal de parte" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Subcategorías" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Moneda de compra de ítem de stock" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Parte original" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Seleccione la parte original a duplicar" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Copiar Imagen" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Copiar imagen desde la parte original" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Copiar BOM" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Copiar la factura de materiales de la parte original" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Copiar datos del parámetro de la parte original" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Cantidad Inicial de Stock" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Seleccione proveedor (o déjelo en blanco para saltar)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleccionar fabricante (o dejar en blanco para saltar)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Número de parte del fabricante" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "La empresa seleccionada no es un proveedor válido" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "La empresa seleccionada no es un fabricante válido" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Nombre de categoría" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "En construcción" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Elementos de stock" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Inventario Total" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Duplicar Parte" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Stock Inicial" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Crear Parte con cantidad inicial de stock" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Información del proveedor" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Añadir información inicial del proveedor para esta parte" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Copiar Parámetros de Categoría" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Copiar plantillas de parámetro de la categoría de partes seleccionada" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Imagen Existente" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "El archivo de imagen no existe" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Validación de Lista de Materiales" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Puede construir" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Precio mínimo" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Anular el valor calculado para precio mínimo" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Precio mínimo de moneda" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Precio máximo" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Precio máximo de moneda" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Actualizar" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 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:1531 +#: part/serializers.py:1563 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:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Seleccionar parte de la que copiar BOM" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Eliminar Datos Existentes" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Eliminar artículos BOM existentes antes de copiar" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Incluye Heredado" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Incluye artículos BOM que son heredados de partes con plantillas" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Omitir filas no válidas" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Activar esta opción para omitir filas inválidas" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Copiar partes sustitutas" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "El complemento no está instalado" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Instalación del complemento no encontrada" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "Instalación no confirmada" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Activar complemento" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Activar este complemento" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "Dimensiones de etiqueta inválidas" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "Carta" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "Nombre de la plantilla" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "Adjuntar al modelo al imprimir" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "Guardar la salida del informe como un archivo adjunto contra la instancia del modelo enlazado al imprimir" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "Patrón de Nombre de archivo" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Filtros" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "Tamaño de página para reportes PDF" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Ancho [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "Ancho de la etiqueta, especificado en mm" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Altura [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "Altura de la etiqueta, especificada en mm" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "Fragmento" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "Archivo fragmento de informe" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "Descripción de archivo de fragmento" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "Activo" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "Reportar archivo de activos" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "Descripción del archivo de activos" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "Selecciona la plantilla de etiqueta" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "Complemento de impresión" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "Selecciona el complemento a usar para imprimir etiquetas" @@ -8231,7 +8292,7 @@ msgstr "Artículo Stock Informe de prueba" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Elementos instalados" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Ubicación principal" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Desactualizado" @@ -8522,7 +8583,7 @@ msgstr "Se debe especificar la pieza" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "Seleccione una parte del proveedor correspondiente para este artículo d msgid "Where is this stock item located?" msgstr "¿Dónde se encuentra este artículo de stock?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Empaquetar este artículo de stock se almacena en" @@ -8583,7 +8644,7 @@ msgstr "¿Está este artículo instalado en otro artículo?" msgid "Serial number for this item" msgstr "Número de serie para este artículo" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Código de lote para este artículo de stock" @@ -8696,7 +8757,7 @@ msgstr "El artículo de stock está en producción" msgid "Serialized stock cannot be merged" msgstr "Stock serializado no puede ser combinado" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Artículos de Stock Duplicados" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "Elemento padre" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Introduzca números de serie para nuevos artículos" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Número de pieza del proveedor" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Expirado" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Elementos secundarios" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Introduzca el número de artículos de stock para serializar" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "La cantidad no debe exceder la cantidad disponible de stock ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Ubicación de stock de destino" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Los números de serie no se pueden asignar a esta parte" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Números de serie ya existen" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Añadir nota de transacción (opcional)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Sub-ubicación" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "La parte debe ser vendible" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "El artículo está asignado a una orden de venta" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "El artículo está asignado a una orden de creación" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Cliente para asignar artículos de stock" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "La empresa seleccionada no es un cliente" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Notas de asignación de stock" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Debe proporcionarse una lista de artículos de stock" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Notas de fusión de stock" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Permitir proveedores no coincidentes" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Permitir fusionar artículos de stock con diferentes partes de proveedor" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Permitir estado no coincidente" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Permitir fusionar artículos de stock con diferentes códigos de estado" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Debe proporcionar al menos dos artículos de stock" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Sin cambios" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Valor de clave primaria de Stock" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "No hay existencias del artículo" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Notas de transacción de stock" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "Órdenes de venta" msgid "Return Orders" msgstr "Ordenes de devolución" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Nombre de usuario" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Nombre" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Nombre del usuario" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Apellido" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Apellido del usuario" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Dirección de correo del usuario" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Personal" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Tiene este usuario permisos de personal" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superusuario" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Es este usuario un superusuario" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Esta cuenta de usuario está activa" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Su cuenta ha sido creada." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Por favor, utilice la función de restablecer la contraseña para iniciar sesión" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Bienvenido a InvenTree" diff --git a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po index 8b52612258..d7baa4fe52 100644 --- a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Estonian\n" "Language: et_EE\n" @@ -49,7 +49,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Teil ei ole selle lehe vaatamiseks luba" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "" @@ -104,13 +104,13 @@ msgstr "Pane kuupäev" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Märkmed" @@ -123,75 +123,91 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Ühenduse viga" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Esines tõrge" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "" @@ -199,7 +215,7 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-post" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Vigane valik" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nimi" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Kirjeldus" msgid "Description (optional)" msgstr "Kirjeldus (valikuline)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Tee" @@ -320,51 +336,51 @@ msgstr "" msgid "Image" msgstr "Pilt" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuuta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "Hiina (lihtsustatud)" msgid "Chinese (Traditional)" msgstr "Hiina (traditsiooniline)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "" @@ -545,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Osa" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -653,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Valikuline" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -671,32 +687,32 @@ msgstr "" msgid "Tracked" msgstr "Jälgitud" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Saadaval" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -704,26 +720,26 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Asukoht" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -845,16 +861,16 @@ msgstr "Koostamise olek" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Loomise kuupäev" @@ -875,7 +891,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" @@ -948,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -964,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1001,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1083,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Osa nimi" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Tühista kõik laoseisu eraldised mahakantud väljundite jaoks" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Valikained" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Jälgitav" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Saadaval laos" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "Katkestatud" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "On link" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "On fail" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1534,11 +1550,11 @@ msgstr "" msgid "No plugin" msgstr "Pluginat pole" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Uuendatud" @@ -1600,7 +1616,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "" @@ -1633,10 +1649,10 @@ msgstr "" msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1660,11 +1676,11 @@ msgstr "" msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "" @@ -1714,7 +1730,7 @@ msgstr "Pealkiri" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Autor" msgid "Summary" msgstr "Kokkuvõte" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Loetud" @@ -1797,7 +1813,7 @@ msgstr "Puuduv fail" msgid "Missing external link" msgstr "Puuduv väline link" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "Faili suurus" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Silt" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Loodud" @@ -1998,334 +2014,334 @@ msgstr "" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Mall" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Andmed" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Märkus" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "Vöötkoodi andmed" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "Kontekst" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "Vastus" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Tulemus" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Võti" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Ülesande nimi" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funktsioon" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Funktsiooni nimi" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumendid" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Ülesande argumendid" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Failinimi" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Mudeli liik" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Grupp puudub" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Taaskäivitamine on vajalik" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Ettevõtte nimi" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "päeva" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Automaatne varundus" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Vöötkoodi tugi" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Ostetav" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Virtuaalne" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Lehe suurus" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "Luba liidese integreerimine" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "Luba pluginatel integreeruda kasutajaliidesesse" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Tootja" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Ettevõte" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "Laos" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Aadress" @@ -4163,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4181,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4210,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Tarnija" msgid "Select supplier" msgstr "Vali tarnija" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4258,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4307,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Väli" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Veerg" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4797,27 +4833,27 @@ msgstr "" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4919,413 +4955,421 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Staatus" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "" -#: order/models.py:1800 -msgid "Line item reference" +#: order/models.py:1814 +msgid "Line Number" msgstr "" -#: order/models.py:1807 -msgid "Line item notes" +#: order/models.py:1815 +msgid "Line number for this item (optional)" msgstr "" #: order/models.py:1822 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1829 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Müügihind" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Saadetud" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Saadetis" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Rida" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "Kopeeri lisareaüksused algsest tellimusest" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Kopeeri parameetrid" @@ -5372,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Määrake selle tellimuse dubleerimise valikud" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "Vale tellimuse ID" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Tootekood" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Vöötkood" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Skännitud ribakood" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Saadetised" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Järgmised seerianumbrid ei ole saadaval" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5797,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "Ikoon" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikoon (valikuline)" @@ -5818,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Osad" @@ -5933,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "Osa kategooria" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "" @@ -5966,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimaalne laoseis" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Originaalosa" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Kopeeri pilt" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Kategooria nimi" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Ehitamine" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Tarnija info" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Minimaalne hind" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Maksimaalne hind" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Uuenda" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "Piirjoon" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "Lisa mudelile printimisel" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "Salvesta aruande väljund manusega seotud mudeli eksemplari juurde printimisel" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Filtrid" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "Mallifaili" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8583,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8696,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Tarnija osa number" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Kasutajanimi" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Eesnimi" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Perekonnanimi" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:240 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po index 7ae7744004..715e3a4ede 100644 --- a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Persian\n" "Language: fa_IR\n" @@ -49,7 +49,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "کاربر سطح دسترسی نمایش این مدل را ندارد" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "نمی‌توان {original} را به {unit} تبدیل کرد" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "مقدار ارائه شده نامعتبر است" @@ -104,13 +104,13 @@ msgstr "تاریخ را وارد کنید" msgid "Invalid decimal value" msgstr "مقدار اعشاری نامعتبر است" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "یادداشت" @@ -123,75 +123,91 @@ msgstr "مقدار '{name}' در قالب الگو ظاهر قرار نمی گی msgid "Provided value does not match required pattern: " msgstr "مقدار ارائه شده با الگوی مورد نیاز مطابقت ندارد: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "نمی توان بیش از 1000 مورد را به طور همزمان سریال کرد" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "رشته شماره سریال خالی" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "سریال تکراری" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "گروه نامعتبر: {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "محدوده گروه {group} از مقدار مجاز بیشتر است ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "هیچ شماره سریالی پیدا نشد" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "برچسب های HTML را از این مقدار حذف کنید" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "داده ها حاوی محتوای علامت گذاری ممنوع است" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "خطا در اتصال" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "سرور با کد وضعیت نامعتبر پاسخ داد" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "یک استثنا رخ داده است" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "سرور با مقدار طول محتوا نامعتبر پاسخ داد" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "اندازه عکس بسیار بزرگ است" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "حجم دانلود تصویر از حداکثر اندازه بیشتر شده است" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "سرور ریموت پاسخ خالی را برگرداند" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "URL ارائه شده یک فایل تصویری معتبر نیست" @@ -199,7 +215,7 @@ msgstr "URL ارائه شده یک فایل تصویری معتبر نیست" msgid "Log in to the app" msgstr "وارد برنامه شوید" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "ایمیل" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "انتخاب نامعتبر" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "نام" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "توضیحات" msgid "Description (optional)" msgstr "توضیحات (اختیاری)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "مسیر" @@ -320,51 +336,51 @@ msgstr "یک خطا توسط سرور ثبت شده است." msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "باید یک عدد معتبر باشد" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "ارز" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "ارز را از گزینه های موجود انتخاب کنید" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "مقدار نامعتبر" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "تصویر ریموت" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "آدرس فایل تصویری از راه دور" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "دانلود تصاویر از URL ریموت فعال نیست" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "دانلود تصویر از URL ریموت انجام نشد" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "چینی (ساده شده)" msgid "Chinese (Traditional)" msgstr "چینی (سنتی)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "واحد فیزیکی نامعتبر" msgid "Not a valid currency code" msgstr "کد ارز معتبر" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "وضعیت سفارش" @@ -545,21 +561,21 @@ msgstr "وضعیت سفارش" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "" msgid "Part" msgstr "قطعه" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "دسته" @@ -653,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "مصرفی" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "اختیاری" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "مونتاژ" @@ -671,32 +687,32 @@ msgstr "مونتاژ" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "سفارش معوق" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "اختصاص داده شده" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "در دسترس" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -704,26 +720,26 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "سفارش ساخت" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "مکان" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "مرجع سفارش فروش" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "منبع محل" @@ -845,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -875,7 +891,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "تاریخ تکمیل" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" @@ -948,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -964,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1001,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1083,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1534,11 +1550,11 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "" @@ -1600,7 +1616,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "" @@ -1633,10 +1649,10 @@ msgstr "" msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1660,11 +1676,11 @@ msgstr "" msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "" @@ -1714,7 +1730,7 @@ msgstr "" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "" msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "" @@ -1797,7 +1813,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "" @@ -1998,334 +2014,334 @@ msgstr "" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "" @@ -4163,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4181,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4210,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4258,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4307,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4797,27 +4833,27 @@ msgstr "" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4919,413 +4955,421 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "" -#: order/models.py:1800 -msgid "Line item reference" +#: order/models.py:1814 +msgid "Line Number" msgstr "" -#: order/models.py:1807 -msgid "Line item notes" +#: order/models.py:1815 +msgid "Line number for this item (optional)" msgstr "" #: order/models.py:1822 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1829 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5372,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5797,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5818,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5933,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "" @@ -5966,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8583,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8696,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:240 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po index 0b20cba345..8084760108 100644 --- a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Finnish\n" "Language: fi_FI\n" @@ -49,7 +49,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Käyttäjän oikeudet eivät riitä kohteen tarkastelemiseen" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Annettu määrä on virheellinen" @@ -104,13 +104,13 @@ msgstr "Anna päivämäärä" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Merkinnät" @@ -123,75 +123,91 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Tyhjä sarjanumero" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Duplikaatti sarjanumero" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Sarjanumeroita ei löytynyt" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Yhteysvirhe" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Palvelin vastasi virheellisellä tilakoodilla" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Kuva on liian iso" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Kuvan lataus ylitti enimmäiskoon" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Etäpalvelin palautti tyhjän vastauksen" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Annettu URL ei ole kelvollinen kuvatiedosto" @@ -199,7 +215,7 @@ msgstr "Annettu URL ei ole kelvollinen kuvatiedosto" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Sähköposti" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Virheellinen valinta" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nimi" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Kuvaus" msgid "Description (optional)" msgstr "Kuvaus (valinnainen)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Polku" @@ -320,51 +336,51 @@ msgstr "" msgid "Image" msgstr "Kuva" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Täytyy olla kelvollinen luku" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuutta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Valitse valuutta käytettävissä olevista vaihtoehdoista" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Virheellinen arvo" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "Kuvatiedoston URL" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Kuvien lataaminen ei ole käytössä" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "" @@ -545,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Osa" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategoria" @@ -653,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -671,32 +687,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Saatavilla" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -704,26 +720,26 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Sijainti" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -845,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -875,7 +891,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" @@ -948,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -964,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1001,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Varastotuote" @@ -1083,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Sarjanumerot" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Ei sallittu" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Seurattavissa" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "Peruttu" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1534,11 +1550,11 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Päivitetty" @@ -1600,7 +1616,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Käyttäjä" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Hinta" @@ -1633,10 +1649,10 @@ msgstr "" msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiivinen" @@ -1660,11 +1676,11 @@ msgstr "Salaisuus" msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "" @@ -1714,7 +1730,7 @@ msgstr "Otsikko" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Julkaisija" msgid "Summary" msgstr "Yhteenveto" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "" @@ -1797,7 +1813,7 @@ msgstr "Puuttuva tiedosto" msgid "Missing external link" msgstr "Puuttuva ulkoinen linkki" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Arvo" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "" @@ -1998,334 +2014,334 @@ msgstr "" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Käytössä" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Muistiinpano" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Avain" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Tiedostonimi" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Ei ryhmää" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Uudelleenkäynnistys vaaditaan" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Yrityksen nimi" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "Yrityksen sisäinen nimi" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Oletusvaluutta" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "päivää" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Automaattinen varmuuskopionti" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "Ota käyttöön tietokannan ja mediatiedostojen automaattinen varmuuskopiointi" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "Automaattisen varmuuskopioinnin aikaväli" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Viivakoodituki" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponentti" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Ostettavissa" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Sisäiset hinnat" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "Sisäisen hinnan ohitus" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Sivun koko" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Salli salasananpalautus" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Salli rekisteröinti" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "Salli SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "Salli SSO kirjautumissivuilla" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "Salli SSO rekisteröinti" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "Sähköposti vaaditaan" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "Sähköpostiosoite kahdesti" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Salasana kahdesti" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "Sallitut verkkotunnukset" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "Pakota MFA" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Valmistaja" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Yritys" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Osoite" @@ -4163,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4181,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "Valitse valmistaja" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Valmistajan osanumero" @@ -4210,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Toimittaja" msgid "Select supplier" msgstr "Valitse toimittaja" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Toimittajan varastonimike" @@ -4258,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4307,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4797,27 +4833,27 @@ msgstr "" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Valmis" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4919,413 +4955,421 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "Tilauksen viite" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Tila" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Asiakas" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "Asiakkaan viite " -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "" -#: order/models.py:1800 -msgid "Line item reference" +#: order/models.py:1814 +msgid "Line Number" msgstr "" -#: order/models.py:1807 -msgid "Line item notes" +#: order/models.py:1815 +msgid "Line number for this item (optional)" msgstr "" #: order/models.py:1822 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1829 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "Vastaanotettu" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Lähetetty" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "Seurantakoodi" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "Laskunumero" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5372,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Viivakoodi" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5797,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "Kuvake" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Kuvake (valinnainen)" @@ -5818,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5933,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "" @@ -5966,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Valmistajan osanumero" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Suodattimet" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Leveys [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Korkeus [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8583,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8696,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Käyttäjätunnus" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Etunimi" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Sukunimi" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:240 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po index 0e1c914067..803afef3a7 100644 --- a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -49,7 +49,7 @@ msgstr "Aucune donnée disponible" msgid "This field must be unique." msgstr "Ce champ doit être unique" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "L'utilisateur n'a pas la permission de voir ce modèle" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Impossible de convertir {original} en {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Quantité fournie invalide" @@ -104,13 +104,13 @@ msgstr "Entrer la date" msgid "Invalid decimal value" msgstr "Valeur décimale invalide" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Notes" @@ -123,75 +123,91 @@ msgstr "La valeur '{name}' n'apparaît pas dans le format du modèle" msgid "Provided value does not match required pattern: " msgstr "La valeur fournie ne correspond pas au modèle requis : " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Impossible de sérialiser plus de 1000 éléments à la fois" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Chaîne de numéro de série vide" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Numéro de série en doublon" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Groupe invalide : {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "La plage de groupe {group} dépasse la quantité autorisée ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Aucun numéro de série trouvé" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Le nombre de numéros de série uniques ({n}) doit correspondre à la quantité ({q})" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Retirer les balises HTML de cette valeur" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "Les données contiennent du contenu markdown interdit" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Erreur de connexion" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Le serveur a répondu avec un code de statut invalide" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Une erreur est survenue" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 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:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Image trop volumineuse" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "La taille de l'image dépasse la taille maximale autorisée" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Le serveur distant a renvoyé une réponse vide" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "L'URL fournie n'est pas un fichier image valide" @@ -199,7 +215,7 @@ msgstr "L'URL fournie n'est pas un fichier image valide" msgid "Log in to the app" msgstr "Se connecter à l'application" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-mail" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Choix invalide" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nom" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Description" msgid "Description (optional)" msgstr "Description (facultative)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Chemin d'accès" @@ -320,51 +336,51 @@ msgstr "Une erreur a été loguée par le serveur." msgid "Image" msgstr "Image" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Doit être un nombre valide" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Devise" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Sélectionnez la devise à partir des options disponibles" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Ce champ ne peut pas être vide." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Valeur non valide" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Images distantes" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL du fichier image distant" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Le téléchargement des images depuis une URL distante n'est pas activé" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Échec du téléchargement de l'image à partir de l'URL distant" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "Format du type de contenu invalide" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "Type de contenu introuvable" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "Le type de contenu ne correspond pas à la classe de mixin requise" @@ -520,11 +536,11 @@ msgstr "Chinois (Simplifié)" msgid "Chinese (Traditional)" msgstr "Chinois (Traditionnel)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Mise à jour disponible" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "Une mise à jour pour InvenTree est disponible" @@ -536,7 +552,7 @@ msgstr "Unité invalide" msgid "Not a valid currency code" msgstr "Code de devise invalide" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Statut de la commande" @@ -545,21 +561,21 @@ msgstr "Statut de la commande" msgid "Parent Build" msgstr "Fabrication parente" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Inclure les variantes" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "Inclure les variantes" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "Inclure les variantes" msgid "Part" msgstr "Pièce" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Catégorie" @@ -653,16 +669,16 @@ msgstr "Exclure l'arbre" msgid "Build must be cancelled before it can be deleted" msgstr "La construction doit être annulée avant de pouvoir être supprimée" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Consommable" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Facultatif" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Assemblage" @@ -671,32 +687,32 @@ msgstr "Assemblage" msgid "Tracked" msgstr "Suivi" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testable" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Commande en cours" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Allouée" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Consommé" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponible" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "En Commande" @@ -704,26 +720,26 @@ msgstr "En Commande" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Ordre de Fabrication" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Emplacement" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Sortie" @@ -767,8 +783,8 @@ msgstr "La date cible doit être postérieure à la date de début" msgid "Build Order Reference" msgstr "Référence de l' Ordre de Fabrication" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Bon de commande de référence" msgid "Sales Order to which this build is allocated" msgstr "Commande de vente à laquelle cette fabrication est allouée" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Emplacement d'origine" @@ -845,16 +861,16 @@ msgstr "État de la construction" msgid "Build status code" msgstr "Code de statut de construction" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Code de lot" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Code de lot pour ce build output" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Date de création" @@ -875,7 +891,7 @@ msgstr "Date d'achèvement cible" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Date cible pour l'achèvement de la construction. La construction sera en retard après cette date." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Date d'achèvement" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Priorité de cet ordre de fabrication" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Code du projet" @@ -948,7 +964,7 @@ msgstr "La commande de construction {build} a été effectuée" msgid "A build order has been completed" msgstr "Une commande de construction a été effectuée" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 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" @@ -964,23 +980,23 @@ msgstr "L'ordre de production a déjà été réalisé" msgid "Build output does not match Build Order" msgstr "L'ordre de production de correspond pas à l'ordre de commande" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "La quantité doit être supérieure à zéro" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "La quantité ne peut pas être supérieure à la quantité de sortie" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "Les sorties de fabrication n'ont pas passé tous les tests requis" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, 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" @@ -1001,10 +1017,10 @@ msgstr "Poste de l'ordre de construction" msgid "Build object" msgstr "Création de l'objet" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Création de l'objet" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "La quantité doit être de 1 pour stock sérialisé" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "La quantité allouée ({q}) ne doit pas excéder la quantité disponible ({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "L'article de stock est suralloué" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Article en stock" @@ -1083,378 +1099,378 @@ msgstr "Stock de destination de l'article" msgid "Build Level" msgstr "Niveau de construction" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Nom de l'article" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Sortie d'assemblage" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "L'ordre de production ne correspond pas à l'ordre parent" -#: build/serializers.py:223 +#: build/serializers.py:230 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:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Cet ordre de production a déjà été produit" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Cet ordre de production n'est pas complètement attribué" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Entrer la quantité désiré pour la fabrication" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Quantité entière requise pour les pièces à suivre" -#: build/serializers.py:337 +#: build/serializers.py:344 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:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Numéros de série" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Entrer les numéros de séries pour la fabrication" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Emplacement de stock pour la sortie de la fabrication" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Allouer automatiquement les numéros de série" -#: build/serializers.py:378 +#: build/serializers.py:385 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:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Les numéros de série suivants existent déjà, ou sont invalides" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Une liste d'ordre de production doit être fourni" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Emplacement du stock pour les sorties épuisées" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Ignorer les allocations" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Abandonner les allocations de stock pour les sorties abandonnées" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Motif de l'élimination des produits de construction(s)" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Emplacement des ordres de production achevés" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Accepter l'allocation incomplète" -#: build/serializers.py:565 +#: build/serializers.py:572 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:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Consommation du stock alloué" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Consommer tout stock qui a déjà été alloué à cette construction" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Retirer les sorties incomplètes" -#: build/serializers.py:698 +#: build/serializers.py:705 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:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Non permis" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Accepter comme consommé par cet ordre de construction" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Désaffecter avant de terminer cette commande de fabrication" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Stock suralloué" -#: build/serializers.py:757 +#: build/serializers.py:764 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:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Certains articles de stock ont été suralloués" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Accepter les non-alloués" -#: build/serializers.py:775 +#: build/serializers.py:782 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:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Le stock requis n'a pas encore été totalement alloué" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Accepter les incomplèts" -#: build/serializers.py:793 +#: build/serializers.py:800 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:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "La quantité nécessaire n'a pas encore été complétée" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "L'ordre de construction a des ordres de construction enfants ouverts" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "L'ordre de construction doit être en état de production" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "L'ordre de production a des sorties incomplètes" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Chaîne d'assemblage" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Sortie d'assemblage" -#: build/serializers.py:877 +#: build/serializers.py:884 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:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Élément de la ligne de construction" -#: build/serializers.py:926 +#: build/serializers.py:933 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:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "L'article doit être en stock" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantité disponible ({q}) dépassée" -#: build/serializers.py:991 +#: build/serializers.py:998 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:999 +#: build/serializers.py:1006 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:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Les articles d'allocation doivent être fournis" -#: build/serializers.py:1087 +#: build/serializers.py:1094 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:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Emplacements exclus" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Exclure les articles de stock de cet emplacement sélectionné" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Stock interchangeable" -#: build/serializers.py:1103 +#: build/serializers.py:1110 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:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Stock de substitution" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Autoriser l'allocation de pièces de remplacement" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Objets Optionnels" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Affecter des éléments de nomenclature facultatifs à l'ordre de fabrication" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Référence de la nomenclature" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "ID de la pièce de la nomenclature" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Nomenclature Nom de la pièce" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Construire" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Pièce fournisseur" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Quantité allouée" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Référence de construction" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Nom de la catégorie de pièces" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Traçable" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Reçu de quelqu'un" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Autoriser les variantes" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Article du BOM" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "En Production" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Planifié pour fabrication" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Stock externe" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Stock disponible" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Stock de substitution disponible" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Stock de variantes disponibles" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "La quantité consommée dépasse la quantité allouée" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "Note optionnelle pour la consommation du stock" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "L'article fabriqué doit pointer vers l'ordre de fabrication correct" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "Dupliquer l'allocation de l'article de fabrication" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "L'article fabriqué doit pointer vers l'ordre de fabrication correct" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "Dupliquer l'allocation de ligne de fabrication" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "Au moins un élément ou une ligne doit être fourni" @@ -1478,7 +1494,7 @@ msgstr "En pause" msgid "Cancelled" msgstr "Annulé" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "Ordre de commande en retard" msgid "Build order {bo} is now overdue" msgstr "L'ordre de commande {bo} est maintenant en retard" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "C'est un lien" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "C'est un fichier" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "L'utilisateur n'a pas les permissions de supprimer cette pièce jointe" @@ -1534,11 +1550,11 @@ msgstr "Aucun code de devise valide fourni" msgid "No plugin" msgstr "Pas de plugin" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Code du projet Étiquette" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Mise à jour" @@ -1600,7 +1616,7 @@ msgstr "La chaîne de caractères constituant la clé doit être unique" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Utilisateur" msgid "Price break quantity" msgstr "Quantité de rupture de prix" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Prix" @@ -1633,10 +1649,10 @@ msgstr "Point de terminaison auquel ce webhook est reçu" msgid "Name for this webhook" msgstr "Nom de ce webhook" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Actif" @@ -1660,11 +1676,11 @@ msgstr "Confidentiel" msgid "Shared secret for HMAC" msgstr "Secret partagé pour HMAC" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "ID message" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "Identifiant unique pour ce message" @@ -1714,7 +1730,7 @@ msgstr "Titre" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Auteur" msgid "Summary" msgstr "Résumé" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Lu" @@ -1797,7 +1813,7 @@ msgstr "Fichier manquant" msgid "Missing external link" msgstr "Lien externe manquant" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "Type de modèle" @@ -1833,7 +1849,7 @@ msgstr "Taille du fichier" msgid "File size in bytes" msgstr "Taille du fichier en octets" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Type de modèle non valide spécifié pour la pièce jointe" @@ -1861,7 +1877,7 @@ msgstr "Clé logique" msgid "State logical key that is equal to this custom state in business logic" msgstr "Clé logique de l'état qui est égale à cet état personnalisé dans la logique métier" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Valeur" @@ -1874,7 +1890,7 @@ msgstr "Valeur numérique qui sera enregistrée dans la base de données des mod msgid "Name of the state" msgstr "Nom de l'Etat" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Étiquette" @@ -1930,7 +1946,7 @@ msgstr "La clé logique doit se trouver dans les clés logiques de l'état de r msgid "Name must be different from the names of the reference status" msgstr "Le nom doit être différent des noms des statuts de référence" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "Liste de sélection" @@ -1982,7 +1998,7 @@ msgstr "Entrée par défaut" msgid "Default entry for this selection list" msgstr "Entrée par défaut pour cette liste de sélection" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Créé le" @@ -1998,334 +2014,334 @@ msgstr "Dernière mise à jour" msgid "Date and time that the selection list was last updated" msgstr "Date et heure de la dernière mise à jour de la liste de sélection" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "Entrée de la liste de sélection" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "Entrées de la liste de sélection" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "Liste de sélection à laquelle appartient cette entrée" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "Valeur de l'entrée de la liste de sélection" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "Étiquette pour l'entrée de la liste de sélection" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "Description de l'entrée de la liste de sélection" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "Cette entrée de la liste de sélection est-elle active ?" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "Modèle de paramètre" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "Modèle de paramètre" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "Les paramètres des cases à cocher ne peuvent pas avoir d'unités" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "Les paramètres des cases à cocher ne peuvent pas comporter de choix" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "Les choix doivent être uniques" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "Le nom du modèle de paramètre doit être unique" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "Type de modèle cible pour ce modèle de paramètre" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "Nom du paramètre" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "Unités" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "Unités physiques pour ce paramètre" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "Description des paramètres" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "Case à cocher" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "Ce paramètre est-il une case à cocher ?" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "Choix" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "Choix valables pour ce paramètre (séparés par des virgules)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "Liste de sélection pour ce paramètre" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Activé" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "Ce modèle de paramètre est-il activé ?" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "Paramètre" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "Paramètres" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "Choix incorrect pour la valeur du paramètre" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Type de modèle non valide pour la pièce jointe" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "Identifiant du Modèle (ID)" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "ID du modèle cible pour ce paramètre" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Modèle" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "Modèle de paramètre" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Données" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "Valeur du paramètre" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Note" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Champ de notes facultatif" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "Analyse du code-barres" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "Données du code-barres" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "Utilisateur qui a scanné le code-barres" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "Horodatage" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "Date et heure du scan de code-barres" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "Point d'accès à l'URL qui a traité le code-barres" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "Contexte" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "Données contextuelles pour la lecture du code-barres" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "Réponse" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "Données de réponse provenant de la lecture du code-barres" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Résultat" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "La lecture du code-barres a-t-elle réussi ?" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "Une erreur s'est produite" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8 : La suppression du journal d'e-mail est protégée. Définissez INVENTREE_PROTECT_EMAIL_LOG à False pour permettre la suppression." -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "Message email" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "Messages email" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "Annoncé" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "Envoyé" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "Échec" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "Livré" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "Confirmé" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "Entrant" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "Sortant" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "Sans réponse" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "Suivi de livraison" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "Suivi de la lecture" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "Suivi du clic" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "ID Global" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identifiant pour ce message (peut être fourni par un système externe)" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "ID du sujet de discussion" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identifiant pour ce fil de message (peut être fourni par un système externe)" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "Fil de discussion" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "Fil lié à ce message" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "Priorité" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "Fil d'Email" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "Fils d'Emails" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Clé" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "Clé unique pour ce fil (utilisée pour identifier le fil)" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "Identifiant unique pour ce fil" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "Démarré en interne" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "Est-ce que ce fil a été démarré en interne ?" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "Date et heure de création du fil" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "Date et heure de dernière mise à jour du fil" @@ -2375,1243 +2391,1259 @@ msgstr "Indique si le paramètre est écrasé par une variable d'environnement" msgid "Override" msgstr "Écraser" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "En cours d'exécution" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Tâches en attente" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Tâches planifiées" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Tâches échouées" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "ID de la tâche" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "ID unique de la tâche" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Verrouillé" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Heure verrouillé" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Nom de la tâche" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Fonction" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Nom de la fonction" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Arguments" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Arguments tâche" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Mots-clés Arguments" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Mots-clés arguments tâche" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Nom du fichier" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Type de modèle" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "L'utilisateur n'a pas le droit de créer ou de modifier des pièces jointes pour ce modèle" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "L'utilisateur n'a pas le droit de créer ou de modifier les paramètres de ce modèle." -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "La liste de sélection est verrouillée" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Pas de groupe" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "L'URL du site est verrouillée par configuration" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Redémarrage nécessaire" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Un paramètre a été modifié, ce qui nécessite un redémarrage du serveur" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Migration en attente" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Nombre de migrations de base de données en attente" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Codes warning actifs" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "Un dictionnaire de codes d'avertissement actifs" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "ID de l'instance" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Identifiant unique pour cette instance InvenTree" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "Annoncer l'ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Annoncer l'ID d'instance du serveur dans l'info sur l'état du serveur (non authentifié)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Nom de l'instance du serveur" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Chaîne de caractères descriptive pour l'instance serveur" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Utiliser le nom de l'instance" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Utiliser le nom de l’instance dans la barre de titre" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Limiter l'affichage de `about`" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Afficher la modale `about` uniquement aux super-utilisateurs" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nom de la société" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "Nom de société interne" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "URL de base" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "URL de base pour l'instance serveur" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Devise par défaut" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "Sélectionnez la devise de base pour les calculs de prix" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "Devises supportées" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "Liste des codes de devises supportés" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "Intervalle de mise à jour des devises" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Fréquence de mise à jour des taux de change (définir à zéro pour désactiver)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "jours" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "Plugin de mise à jour de devise" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "Plugin de mise à jour des devises à utiliser" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "Télécharger depuis l'URL" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "Autoriser le téléchargement d'images distantes et de fichiers à partir d'URLs externes" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "Limite du volume de téléchargement" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "Taille maximale autorisée pour le téléchargement de l'image distante" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "Agent utilisateur utilisé pour télécharger depuis l'URL" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Permettre de remplacer l'agent utilisateur utilisé pour télécharger des images et des fichiers à partir d'URL externe (laisser vide pour la valeur par défaut)" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "Validation stricte d'URL" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "Spécification du schéma nécessaire lors de la validation des URL" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "Intervalle de vérification des mises à jour" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "À quelle fréquence vérifier les mises à jour (définir à zéro pour désactiver)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Backup automatique" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "Activer le backup automatique de la base de données et des fichiers médias" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "Intervalle de sauvegarde automatique" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "Spécifiez le nombre de jours entre les sauvegardes automatique" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "Intervalle de suppression des tâches" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "Les résultats de la tâche en arrière-plan seront supprimés après le nombre de jours spécifié" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "Intervalle de suppression du journal d'erreur" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "Les logs d'erreur seront supprimés après le nombre de jours spécifié" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "Intervalle de suppression du journal de notification" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "Les notifications de l'utilisateur seront supprimées après le nombre de jours spécifié" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "Intervalle de suppression d'Email" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "Les Emails seront supprimés après le nombre de jours spécifié" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "Protéger le log d'Email" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "Empêcher la suppression des entrées du log d'email" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Support des code-barres" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "Activer le support du scanner de codes-barres dans l'interface web" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "Résultats des codes-barres des magasins" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "Stocker les résultats de la lecture du code-barres dans la base de données" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "Scanners de codes-barres Comptage maximal" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "Nombre maximum de résultats de lecture de codes-barres à stocker" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "Délai d'entrée du code-barres" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "Délai de traitement du code-barres" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "Prise en charge de la webcam code-barres" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "Autoriser la numérisation de codes-barres via la webcam dans le navigateur" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "Code-barres Afficher les données" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "Afficher les données du code-barres dans le navigateur sous forme de texte" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "Plugin de génération de codes-barres" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "Plugin à utiliser pour la génération interne de données de code-barres" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "Modifications de la pièce" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "Activer le champ de modification de la pièce" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "Révision de l'assemblage uniquement" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "N'autoriser les révisions que pour les pièces d'assemblage" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "Autoriser la suppression de l'Assemblée" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "Permettre la suppression de pièces utilisées dans un assemblage" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "Expression régulière pour la correspondance avec l'IPN de la Pièce" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "Autoriser les IPN dupliqués" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "Permettre à plusieurs pièces de partager le même IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "Autoriser l'édition de l'IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "Permettre de modifier la valeur de l'IPN lors de l'édition d'une pièce" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "Copier les données de la pièce" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "Copier les données des paramètres par défaut lors de la duplication d'une pièce" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "Copier les données des paramètres de la pièce" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "Copier les données des paramètres par défaut lors de la duplication d'une pièce" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "Copier les données de test de la pièce" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "Copier les données de test par défaut lors de la duplication d'une pièce" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "Copier les templates de paramètres de catégorie" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "Copier les templates de paramètres de la catégorie lors de la création d'une pièce" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "Les pièces sont des templates par défaut" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "Les pièces peuvent être assemblées à partir d'autres composants par défaut" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Composant" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "Les pièces peuvent être utilisées comme sous-composants par défaut" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Achetable" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "Les pièces sont achetables par défaut" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Vendable" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "Les pièces sont vendables par défaut" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "Les pièces sont traçables par défaut" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Virtuelle" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "Les pièces sont virtuelles par défaut" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "Afficher les pièces connexes" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "Afficher les pièces connexes à une pièce" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "Stock initial" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "Permettre la création d'un stock initial lors de l'ajout d'une nouvelle pièce" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "Données initiales du fournisseur" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Permettre la création des données initiales du fournisseur lors de l'ajout d'une nouvelle pièce" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "Format d'affichage du nom de la pièce" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "Format pour afficher le nom de la pièce" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "Icône de catégorie par défaut" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "Icône par défaut de la catégorie de la pièce (vide signifie aucune icône)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "Nombre minimal de décimales" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Nombre minimum de décimales à afficher lors de l'affichage des prix" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "Nombre maximal de décimales pour la tarification" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Nombre maximal de décimales à afficher lors du rendu des données de tarification" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "Utiliser le prix fournisseur" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Inclure les réductions de prix dans le calcul du prix global" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "Remplacer l'historique des achats" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "La tarification historique des bons de commande remplace les réductions de prix des fournisseurs" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "Utiliser les prix des articles en stock" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Utiliser les prix des données de stock saisies manuellement pour calculer les prix" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "Âge de tarification des articles de stock" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Exclure les articles en stock datant de plus de ce nombre de jours des calculs de prix" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "Utiliser les prix variants" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "Inclure la tarification variante dans le calcul global des prix" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "Variantes actives uniquement" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "N'utiliser que des pièces de variante actives pour calculer le prix de la variante" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "Mise à jour automatique des prix" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "Mettre à jour automatiquement les prix des pièces quand les données internes changes" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "Intervalle de regénération des prix" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "Nombre de jours avant la mise à jour automatique du prix de la pièce" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Prix internes" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "Activer les prix internes pour les pièces" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "Substitution du prix interne" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "Si disponible, les prix internes remplacent les calculs de la fourchette de prix" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "Activer l'impression d'étiquettes" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "Activer l'impression d'étiquettes depuis l'interface Web" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "Étiquette image DPI" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Résolution DPI lors de la génération de fichiers image pour fournir aux plugins d'impression d'étiquettes" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Activer les rapports" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "Activer la génération de rapports" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "Mode Débogage" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "Générer des rapports en mode debug (sortie HTML)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "Journal des erreurs" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "Enregistrer les erreurs qui se produisent lors de la génération de rapports" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Taille de la page" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "Taille de page par défaut pour les rapports PDF" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "Renforcer les unités des paramètres" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "Si des unités sont fournies, les valeurs de paramètre doivent correspondre aux unités spécifiées" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "Numéro de Série Universellement Unique" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "Les numéros de série pour les articles en stock doivent être uniques au niveau global" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "Supprimer le stock épuisé" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "Détermine le comportement par défaut lorsqu'un article de stock est épuisé" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "Modèle de code de lot" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "Modèle pour générer des codes par défaut pour les articles en stock" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "Expiration du stock" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "Activer la fonctionnalité d'expiration du stock" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "Vendre le stock expiré" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "Autoriser la vente de stock expiré" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "Délai de péremption du stock" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "Nombre de jours pendant lesquels les articles en stock sont considérés comme périmés avant d'expirer" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "Construction de stock expirée" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "Autoriser la construction avec un stock expiré" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "Contrôle de la propriété des stocks" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "Activer le contrôle de la propriété sur les emplacements de stock et les articles" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "Icône par défaut de l'emplacement du stock" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "Icône par défaut de l'emplacement du stock (vide signifie aucune icône)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "Afficher les pièces en stock installées" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "Affichage des articles en stock installés dans les tableaux de stock" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "Vérifier la nomenclature lors de l'installation des articles" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Les articles de stock installés doivent exister dans la nomenclature de la pièce mère" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "Autoriser le transfert des produits en rupture de stock" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Permettre le transfert d'articles qui ne sont pas en stock d'un magasin à l'autre" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "Modèle de référence de commande de construction" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "Modèle requis pour générer le champ de référence de l'ordre de construction" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "Nécessite un Responsable propriétaire" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "Un propriétaire responsable doit être assigné à chaque commande" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "Exiger une partie active" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "Empêcher la création d'un ordre de fabrication pour les pièces inactives" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "Requiert une pièce verrouillée" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "Empêcher la création d'un ordre de fabrication pour les pièces non verrouillées" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "Exiger une nomenclature valide" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "Empêcher la création d'un ordre de fabrication si la nomenclature n'a pas été validée" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "Exiger des ordonnances fermées pour les enfants" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "Empêcher l'achèvement de l'ordre de construction jusqu'à ce que tous les ordres d'enfants soient clôturés" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "Ordres de fabrication externes" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "Activer la fonctionnalité d'ordre de fabrication externe" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Blocage jusqu'à la réussite des tests" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Empêcher l'achèvement des résultats de la construction jusqu'à ce que tous les tests requis soient réussis" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "Activer les retours de commandes" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "Activer la fonctionnalité de retour de commande dans l'interface utilisateur" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "Modèle de référence de retour de commande" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "Modèle requis pour générer le champ de référence de la commande de retour" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "Modifier les retours de commandes terminées" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "Autoriser la modification des retours après leur enregistrement" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "Modèle de référence de bon de commande" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "Modèle requis pour générer le champ de référence du bon de commande" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "Expédition par défaut du bon de commande" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "Activer la création d'expédition par défaut avec les bons de commandes" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "Modifier les commandes de vente terminées" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Autoriser la modification des commandes de vente après avoir été expédiées ou complétées" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "L'expédition nécessite une vérification" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "Empêcher l'achèvement des envois jusqu'à ce que les articles aient été vérifiés" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "Marquer les commandes expédiées comme achevées" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Les commandes marquées comme expédiées seront automatiquement complétées, en contournant le statut « expédié »" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "Modèle de référence de commande d'achat" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "Modèle requis pour générer le champ de référence de bon de commande" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "Modifier les bons de commande terminés" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Autoriser la modification des bons de commande après avoir été expédiés ou complétés" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "Convertir la monnaie" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "Convertir la valeur de l'article dans la devise de base lors de la réception du stock" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "Achat automatique des commandes" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Marquer automatiquement les bons de commande comme terminés lorsque tous les articles de la ligne sont reçus" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Activer les mots de passe oubliés" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "Activer la fonction \"Mot de passe oublié\" sur les pages de connexion" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Activer les inscriptions" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "Activer l'auto-inscription pour les utilisateurs sur les pages de connexion" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "Activer le SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "Activer le SSO sur les pages de connexion" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "Activer l'inscription SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Activer l'auto-inscription via SSO pour les utilisateurs sur les pages de connexion" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "Activer la synchronisation du groupe SSO" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Permettre la synchronisation des groupes InvenTree avec les groupes fournis par l'IdP" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "Clé du groupe SSO" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Le nom de l'attribut de revendication de groupe fourni par l'IdP" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "Carte de groupe SSO" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Une correspondance entre les groupes SSO et les groupes InvenTree locaux. Si le groupe local n'existe pas, il sera créé." -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "Supprimer les groupes en dehors de SSO" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Indique si les groupes attribués à l'utilisateur doivent être supprimés s'ils ne sont pas gérés par l'IdP. La désactivation de ce paramètre peut entraîner des problèmes de sécurité" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "Email requis" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "Exiger que l'utilisateur fournisse un mail lors de l'inscription" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "Saisie automatique des utilisateurs SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "Remplir automatiquement les détails de l'utilisateur à partir des données de compte SSO" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "Courriel en double" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "Lors de l'inscription, demandez deux fois aux utilisateurs leur mail" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Mot de passe deux fois" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "Lors de l'inscription, demandez deux fois aux utilisateurs leur mot de passe" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "Domaines autorisés" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Restreindre l'inscription à certains domaines (séparés par des virgules, commençant par @)" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "Grouper sur inscription" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Groupe auquel les nouveaux utilisateurs sont assignés lors de l'enregistrement. Si la synchronisation des groupes SSO est activée, ce groupe n'est défini que si aucun groupe ne peut être attribué par l'IdP." -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "Forcer l'authentification multifacteurs" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "Les utilisateurs doivent utiliser l'authentification multifacteurs." -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "Activer ce paramètre demandera à tous les utilisateurs de configurer l'authentification multi-facteurs. Toutes les sessions seront déconnectées immédiatement." -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "Vérifier les plugins au démarrage" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Vérifier que tous les plugins sont installés au démarrage - activer dans les environnements conteneurs" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "Vérifier les mises à jour des plugins" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "Activer les vérifications périodiques pour les mises à jour des plugins installés" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "Activer l'intégration d'URL" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "Autoriser les plugins à ajouter des chemins URL" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "Activer l'intégration de navigation" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "Activer les plugins à s'intégrer dans la navigation" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "Activer l'intégration de plugins" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "Activer l'intégration de plugin pour ajouter des apps" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "Activer l'intégration du planning" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "Autoriser les plugins à éxécuter des tâches planifiées" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "Activer l'intégration des évènements" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "Autoriser les plugins à répondre aux évènements internes" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "Permettre l'intégration de l'interface" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "Permettre aux plugins de s'intégrer dans l'interface utilisateur" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "Activer l'intégration mail" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Autoriser les plugins à traiter les mails entrants/sortants" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "Activer les codes de projet" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "Activer les codes de projet pour le suivi des projets" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "Activer la fonctionnalité d'enregistrement des historiques de niveaux de stock et de leur valeur" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "Exclure les localisations externes" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "Période de l'inventaire automatique" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "Afficher les noms des utilisateurs" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "Afficher les noms complets des utilisateurs au lieu des noms d'utilisateur" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "Afficher les profils d'utilisateur" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "Afficher les profils des utilisateurs sur leur page de profil" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "Activer les données de station de test" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "Activer la collecte des données de la station de test pour les résultats de test" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "La pièce est active" msgid "Manufacturer is Active" msgstr "Le fabricant est actif" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Le fournisseur de la pièce est active" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "La pièce interne est active" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Le fournisseur est actif" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Fabricant" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Société" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "A du stock" @@ -4071,7 +4103,7 @@ msgstr "N° de TVA" msgid "Company Tax ID" msgstr "Numéro d'identification fiscale de l'entreprise" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Adresse" @@ -4163,7 +4195,7 @@ msgstr "Notes internes pour la livraison" msgid "Link to address information (external)" msgstr "Lien vers les informations de l'adresse (externe)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Pièces du fabricant" @@ -4181,12 +4213,12 @@ msgstr "Sélectionner une partie" msgid "Select manufacturer" msgstr "Sélectionner un fabricant" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "Référence fabricant" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Référence du fabricant" @@ -4210,8 +4242,8 @@ msgstr "Les unités d'emballage doivent être supérieures à zéro" msgid "Linked manufacturer part must reference the same base part" msgstr "La pièce du fabricant liée doit faire référence à la même pièce de base" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Fournisseur" msgid "Select supplier" msgstr "Sélectionner un fournisseur" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Unité de gestion des stocks des fournisseurs" @@ -4258,8 +4290,8 @@ msgstr "coût de base" msgid "Minimum charge (e.g. stocking fee)" msgstr "Frais minimums (par exemple frais de stock)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Conditionnement" @@ -4307,14 +4339,18 @@ msgstr "Devise par défaut utilisée pour ce fournisseur" msgid "Company Name" msgstr "Nom de l'entreprise" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "En Stock" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "Ruptures de prix" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Une erreur s'est produite lors de l'exportation des données" @@ -4419,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "Identifiant de base de données existant pour l'enregistrement" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "La colonne est déjà associée à un champ de la base de données" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Le champ est déjà associé à une colonne de données" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "Le mappage des colonnes doit être lié à une session d'importation valide" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "La colonne n'existe pas dans le fichier de données" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "Le champ n'existe pas dans le modèle cible" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Le champ sélectionné est en lecture seule" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Session d'importation" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Champ d'application" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Colonne" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Index des lignes" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Données de la ligne d'origine" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Erreurs" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Valide" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "L'ID est requis pour mettre à jour les enregistrements existants." -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "Aucun enregistrement trouvé avec l'ID fourni" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "Format d'ID invalide" @@ -4579,7 +4615,7 @@ msgstr "Nombre de copies à imprimer pour chaque étiquette" msgid "Connected" msgstr "Connecté" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Inconnu" @@ -4711,7 +4747,7 @@ msgstr "Valeur maximale pour le type de progression, requis si type=progress" msgid "Order Reference" msgstr "Référence de commande" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Remarquable" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "Possède un Tarif" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Terminé avant" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Terminé après" @@ -4779,17 +4815,17 @@ msgstr "Terminé après" msgid "External Build Order" msgstr "Ordre de fabrication externe" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "Commande" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Commande Complétée" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Pièces Internes" @@ -4797,27 +4833,27 @@ msgstr "Pièces Internes" msgid "Order Pending" msgstr "Commande En Attente" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Terminé" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Fait l'objet d'une expédition" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Commande d’achat" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "Commande d’achat" msgid "Sales Order" msgstr "Commandes" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "L'adresse ne correspond pas à la société sélectionnée" msgid "Order description (optional)" msgstr "Description de la commande (facultatif)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "Sélectionner le code du projet pour cette commande" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "Lien vers une page externe" @@ -4886,7 +4922,7 @@ msgstr "Date de début" msgid "Scheduled start date for this order" msgstr "Date de début prévue pour cette commande" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Date Cible" @@ -4919,413 +4955,421 @@ msgstr "Point de contact pour cette commande" msgid "Company address for this order" msgstr "Adresse de l'entreprise pour cette commande" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "Référence de la commande" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "État" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "Statut de la commande d'achat" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "Société de laquelle les articles sont commandés" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "Référence du fournisseur" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "Code de référence de la commande fournisseur" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "reçu par" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "Date à laquelle la commande a été complété" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "Destination" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "Destination des articles reçus" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "Le fournisseur de la pièce doit correspondre au fournisseur de la commande" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "Le poste ne correspond pas au bon de commande" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "Il manque une pièce liée à l'article de la ligne" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "La quantité doit être un nombre positif" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Client" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "Société à laquelle les articles sont vendus" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "Statut de la commande client" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "Référence client " -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "Code de référence de la commande du client" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "Nom de l’expédition" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "expédié par" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "La commande est déjà terminée" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "La commande est déjà annulée" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "Seule une commande ouverte peut être marquée comme complète" -#: order/models.py:1450 +#: order/models.py:1463 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:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "L'ordre ne peut pas être achevé car les allocations sont incomplètes" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "L'ordre ne peut pas être complété car il y a des postes incomplets" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "La commande est verrouillée et ne peut être modifiée" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "Nombre d'élement" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1822 msgid "Line item reference" msgstr "Référence du poste" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "Notes sur les postes" -#: order/models.py:1822 +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Date cible pour ce poste (laisser vide pour utiliser la date cible de la commande)" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "Description du poste (facultatif)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "Contexte supplémentaire pour cette ligne" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "Prix unitaire" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "Poste du bon de commande" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "La pièce du fournisseur doit correspondre à celle du fournisseur" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "L'ordre de fabrication doit être marqué externe" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "Les ordres de fabrication ne peuvent être liées qu'à des pièces d'assemblage" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "Les pièces d'ordre de fabrication doivent correspondre la pièce d'objet" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "Pièce fournisseur" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "Reçu" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "Nombre d'éléments reçus" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Prix d'achat" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "Prix d'achat unitaire" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "Ordre de fabrication externe à remplir par cet élément de ligne" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "Ligne supplémentaire du bon de commande" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "Poste de commande client" -#: order/models.py:2121 +#: order/models.py:2143 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:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Prix de vente" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "Prix de vente unitaire" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Expédié" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "Quantité expédiée" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "Envoi de la commande client" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "L'adresse d'expédition doit correspondre au client" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "Adresse de livraison pour cet envoi" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "Date d'expédition" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "Date de Livraison" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "Date de livraison de l'envoi" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "Vérifié par" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "Utilisateur qui a vérifié cet envoi" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envoi" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "Numéro d'expédition" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "N° de suivi" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "Information de suivi des colis" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "N° de facture" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "Numéro de référence de la facture associée" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "Le colis a déjà été envoyé" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "L'expédition n'a pas d'articles en stock alloués" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "L'expédition doit être vérifiée avant de pouvoir être terminée" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "Ligne supplémentaire de commande client" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "Affectation des commandes clients" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "L'article de stock n'a pas été assigné" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "Impossible d'allouer l'article en stock à une ligne avec une autre pièce" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "Impossible d'allouer le stock à une ligne sans pièce" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La quantité d'allocation ne peut pas excéder la quantité en stock" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "La quantité allouée doit être supérieure à zéro" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "La quantité doit être égale à 1 pour un article de stock sérialisé" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "La commande client ne correspond pas à l'expédition" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "L'envoi ne correspond pas à la commande client" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Ligne" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "Référence de l'expédition de la commande client" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "Article" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "Sélectionner l'article de stock à affecter" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "Saisir la quantité d'allocation de stock" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "Retour Référence de la commande" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "Entreprise à l'origine du retour des articles" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "Statut du retour de commande" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "Poste de l'ordre de retour" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "L'article en stock doit être spécifié" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "La quantité retournée dépasse la quantité en stock" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "La quantité retournée doit être supérieure à zéro" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "Quantité non valide pour un article de stock sérialisé" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "Sélectionner l'article à retourner par le client" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "Date de réception" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "La date de réception de cet article en retour" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "Résultats" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "Résultat pour ce poste" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "Coût associé au retour ou à la réparation de ce poste" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "Ordre de retour Ligne supplémentaire" @@ -5353,7 +5397,7 @@ msgstr "Copier les lignes supplémentaires" msgid "Copy extra line items from the original order" msgstr "Copier les postes supplémentaires de l'ordre original" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Copier les paramètres" @@ -5372,216 +5416,216 @@ msgstr "Postes de travail" msgid "Completed Lines" msgstr "Lignes achevées" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Duplicata de commande" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Spécifier les options de duplication de cette commande" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "ID de commande invalide" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Nom du fournisseur" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "La commande ne peut pas être annulée" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Permettre la clôture d'une commande avec des postes incomplets" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "La commande comporte des postes incomplets" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "La commande n'est pas ouverte" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Tarification automobile" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Calculer automatiquement le prix d'achat sur la base des données de pièces du fournisseur" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Devise du prix d'achat" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Fusionner des éléments" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Fusionner en un seul poste les éléments ayant la même partie, la même destination et la même date cible" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Unité de gestion des stocks" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Numéro de pièce interne" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Nom de la pièce interne" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "La pièce du fournisseur doit être spécifiée" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Le bon de commande doit être spécifié" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Le fournisseur doit correspondre au bon de commande" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Le bon de commande doit correspondre au fournisseur" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Poste" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Sélectionner le lieu de destination des envois reçus" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Saisir le code de lot pour les articles de stock entrant" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Date d'expiration" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Saisir la date d'expiration des articles de stock entrant" -#: order/serializers.py:835 +#: order/serializers.py:878 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:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Remplacer les informations d'emballage pour les articles en stock entrants" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Note supplémentaire pour les articles en stock entrant" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Code-barres" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Code-barres scanné" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Le code-barres est déjà utilisé" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Les postes doivent être fournis" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "L'emplacement de la destination doit être spécifié" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Les valeurs de code-barres fournies doivent être uniques" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Envois" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Envois terminés" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "Lignes allouées" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Devise du prix de vente" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Postes alloués" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Aucun détail sur l'expédition n'est fourni" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Le poste n'est pas associé à cette commande" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "La quantité doit être positive" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Entrez les numéros de série à allouer" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "L'envoi a déjà été effectué" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "L'envoi n'est pas associé à cette commande" -#: order/serializers.py:1763 +#: order/serializers.py:1868 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:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Les numéros de série suivants sont indisponibles" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Poste de commande de retour" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Le poste ne correspond pas à l'ordre de retour" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Le poste a déjà été reçu" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Les articles ne peuvent être reçus que pour des commandes en cours" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Quantité à retourner" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Devise du prix de la ligne" @@ -5797,7 +5841,7 @@ msgstr "Mots-clés par défaut pour les pièces de cette catégorie" msgid "Icon" msgstr "Icône" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Icône (facultatif)" @@ -5818,7 +5862,7 @@ msgstr "Valeur par Défaut" msgid "Default Parameter Value" msgstr "Valeur par défaut du paramètre" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Pièces" @@ -5933,7 +5977,7 @@ msgstr "Les mots-clés partiels pour améliorer la visibilité dans les résulta msgid "Part category" msgstr "Catégorie de la pièce" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" @@ -5942,7 +5986,7 @@ msgstr "IPN" msgid "Part revision or version number" msgstr "Numéro de révision ou de version de la pièce" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Révision" @@ -5966,7 +6010,7 @@ msgstr "Expiration par défaut" msgid "Expiry time (in days) for stock items of this part" msgstr "Délai d'expiration (en jours) pour les articles en stock de cette pièce" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Stock Minimum" @@ -6447,355 +6491,355 @@ msgstr "Il n'est pas possible de créer une relation entre une pièce et elle-m msgid "Duplicate relationship already exists" msgstr "Une relation en double existe déjà" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Catégorie de parents" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Catégorie de pièce mère" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Sous-catégories" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Résultats" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Nombre de résultats enregistrés par rapport à ce modèle" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Devise d'achat de l'item" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "Le fichier n'est pas une image" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Partie originale" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Sélectionner la partie originale à dupliquer" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Copier l'image" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Copier l'image à partir de la partie originale" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Copier la nomenclature" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Copie de la nomenclature de la pièce originale" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Copie des données de paramètres de la pièce d'origine" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Notes sur la copie" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Copier les notes de la partie originale" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "Test Copie" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Quantité de stock initial" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Indiquer la quantité de stock initiale pour cette pièce. Si la quantité est égale à zéro, aucun stock n'est ajouté." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Emplacement initial du stock" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Spécifier l'emplacement du stock initial pour cette pièce" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Sélectionner le fournisseur (ou laisser en blanc pour passer)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Sélectionner le fabricant (ou laisser en blanc pour ignorer)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Numéro de pièce du fabricant" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "L'entreprise sélectionnée n'est pas un fournisseur valide" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "L'entreprise sélectionnée n'est pas un fabricant valide" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "La pièce du fabricant correspondant à ce MPN existe déjà" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "La pièce du fournisseur correspondant à cette UGS existe déjà" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Nom catégorie" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Construction" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "Quantité de cette pièce actuellement en production" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Quantité exceptionnelle de cette pièce sont planifié à la fabrication" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Éléments en stock" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Révisions" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Stock total" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Stock non attribué" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Variante Stock" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Dupliquer une pièce" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Copier les données initiales d'une autre partie" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Stock initial" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Créer une pièce avec une quantité de stock initiale" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Informations sur le fournisseur" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Ajouter les informations initiales du fournisseur pour cette pièce" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Copier les paramètres de la catégorie" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Copier les modèles de paramètres de la catégorie de pièces sélectionnée" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Image existante" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Nom de fichier d'une image de pièce existante" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Le fichier image n'existe pas" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Valider l'ensemble de la nomenclature" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Peut construire" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "Nécessaire pour fabrication" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "Alloué à la fabrication" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "Nécessaire pour les commandes" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "Alloué aux commandes" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Prix Minimum" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Remplacer la valeur calculée pour le prix minimum" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Prix minimum monnaie" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Prix Maximum" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Remplacer la valeur calculée pour le prix maximum" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Devise du prix maximum" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Mise à jour" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Mise à jour des prix pour cette pièce" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Impossible de convertir les devises fournies en {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Le prix minimum ne doit pas être supérieur au prix maximum" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Le prix maximum ne doit pas être inférieur au prix minimum" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Sélectionner l'assemblage parent" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Sélectionner le composant" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Sélectionner la pièce à partir de laquelle copier la nomenclature" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Supprimer les données existantes" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Supprimer les postes de nomenclature existants avant de les copier" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Inclure l'héritage" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Inclure les éléments de nomenclature hérités des pièces modélisées" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Sauter les lignes non valides" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Activez cette option pour ignorer les lignes non valides" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Copier les pièces de remplacement" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copie de pièces de rechange en cas de duplication de postes de nomenclature" @@ -7516,7 +7560,7 @@ msgstr "Frontière" msgid "Print a border around each label" msgstr "Imprimer une bordure autour de chaque étiquette" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "Paysage" @@ -7596,64 +7640,77 @@ msgstr "Prise en charge de la lecture des codes-barres TME" msgid "The Supplier which acts as 'TME'" msgstr "Le fournisseur qui agit en tant que \"TME" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Seuls les membres du personnel peuvent administrer les plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "L'installation du plugin est désactivée" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Installation réussie du plugin" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Installation du plugin dans {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "Le plugin n'a pas été trouvé dans le registre" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "Le plugin n'est pas un plugin packagé" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Le nom du paquet du plugin n'a pas été trouvé" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Seuls les membres du personnel peuvent administrer les plugins" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "La désinstallation des plugins est désactivée" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "Le plugin ne peut pas être désinstallé car il est actuellement actif" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "Le plugin n'est pas installé" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "L'installation du plugin n'a pas été trouvée" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Désinstallation réussie du plugin" @@ -7900,55 +7957,55 @@ msgstr "Installation non confirmée" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Recharge complète" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Effectuer un rechargement complet du registre des plugins" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Forcer le rechargement" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Forcer le rechargement du registre des plugins, même s'il est déjà chargé" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Collecter les plugins" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Collecter les plugins et les ajouter au registre" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Activer le plugin" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Activer ce plugin" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Supprimer la configuration" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Supprimer la configuration du plugin de la base de données" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "Articles" @@ -7964,7 +8021,7 @@ msgstr "Le plugin ne prend pas en charge l'impression d'étiquettes" msgid "Invalid label dimensions" msgstr "Dimensions de l'étiquette non valides" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "Aucun élément valide n'a été fourni au modèle" @@ -7988,152 +8045,156 @@ msgstr "Lettre" msgid "Template file with this name already exists" msgstr "Le fichier modèle portant ce nom existe déjà" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "Nom du modèle" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "Description du modèle" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "Numéro de révision (auto-incrémentation)" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "Joindre au modèle sur l'impression" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "Enregistrer le rapport en tant que pièce jointe à l'instance de modèle liée lors de l'impression" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "Modèle de nom de fichier" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "Modèle de génération de noms de fichiers" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "Le modèle est activé" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "Type de modèle cible pour le modèle" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Filtres" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "Filtres de requête de modèle (liste de paires clé/valeur séparées par des virgules)" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "Fichier modèle" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "Taille des pages pour les rapports PDF" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "Rendre le rapport en orientation paysage" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "Fusionner" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "Rapport généré à partir du modèle {self.name}" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "Erreur dans la génération du rapport" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Largeur [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "Largeur de l'étiquette, spécifiée en mm" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Hauteur [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "Hauteur de l'étiquette, spécifiée en mm" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "Erreur d'impression des étiquettes" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "Extrait " -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "Fichier d'extrait de rapport" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "Description du fichier d'extrait" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "Elément" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "Rapport sur le fichier d'actifs" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "Description du fichier d'actifs" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "Sélectionner un modèle de rapport" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "Liste des clés primaires des éléments à inclure dans le rapport" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "Sélection du modèle d'étiquette" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "Plugin d'impression" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "Sélectionner le plugin à utiliser pour l'impression des étiquettes" @@ -8231,7 +8292,7 @@ msgstr "Rapport de test des articles en stock" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Éléments installés" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "la balise part_image nécessite une instance de Part" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "la balise company_image nécessite une instance d'entreprise" @@ -8304,7 +8365,7 @@ msgstr "Filtrer par lieux de premier niveau" msgid "Include sub-locations in filtered results" msgstr "Inclure les sous-emplacements dans les résultats filtrés" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Emplacement parent" @@ -8388,7 +8449,7 @@ msgstr "Date d'expiration avant" msgid "Expiry date after" msgstr "Date d’expiration après" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Périmé" @@ -8522,7 +8583,7 @@ msgstr "La pièce doit être spécifiée" msgid "Stock items cannot be located into structural stock locations!" msgstr "Les articles en stock ne peuvent pas être localisés dans des emplacements de stock structurel !" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Il n'est pas possible de créer un article de stock pour les pièces virtuelles" @@ -8567,7 +8628,7 @@ msgstr "Sélectionnez une pièce fournisseur correspondante pour cet article en msgid "Where is this stock item located?" msgstr "Où se trouve cet article en stock ?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "L'emballage de cet article en stock est stocké dans" @@ -8583,7 +8644,7 @@ msgstr "L'article a été installé dans un autre article ?" msgid "Serial number for this item" msgstr "Numéro de série pour cet article" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Code de lot pour cet article de stock" @@ -8696,7 +8757,7 @@ msgstr "L'article de stock est actuellement en production" msgid "Serialized stock cannot be merged" msgstr "Le stock sérialisé ne peut pas être fusionné" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Articles de stock en double" @@ -8820,7 +8881,7 @@ msgstr "Sélectionner la pièce pour laquelle un numéro de série doit être g msgid "Quantity of serial numbers to generate" msgstr "Nombre de numéros de série à générer" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "Modèle de test pour ce résultat" @@ -8844,222 +8905,222 @@ msgstr "Article Parent" msgid "Parent stock item" msgstr "Article de stock parent" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Utiliser la taille de l'emballage lors de l'ajout : la quantité définie est le nombre d'emballages" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Entrez les numéros de série pour les nouveaux articles" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Référence du fournisseur" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Expiré" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Éléments enfants" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "Suivi des éléments" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "Prix d'achat de cet article en stock, par unité ou par paquet" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Entrez le nombre d'articles en stock à sérialiser" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "La quantité ne doit pas dépasser la quantité disponible en stock ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Emplacement du stock de destination" -#: stock/serializers.py:746 +#: stock/serializers.py:760 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:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Les numéros de série existent déjà" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Sélectionner l'article de stock à installer" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Quantité à installer" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Saisir la quantité d'articles à installer" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Ajouter une note de transaction (facultatif)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "La quantité à installer doit être d'au moins 1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "L'article en stock n'est pas disponible" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "La pièce sélectionnée ne figure pas dans la nomenclature" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "La quantité à installer ne doit pas dépasser la quantité disponible" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Emplacement de destination de l'élément désinstallé" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Sélectionner la pièce à convertir en article de stock" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "La partie sélectionnée n'est pas une option valide pour la conversion" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Impossible de convertir un article de stock auquel un SupplierPart a été attribué" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Code d'état de l'article en stock" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Sélectionner les articles en stock pour modifier leur statut" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Aucun article en stock n'a été sélectionné" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Sous-localisations" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Emplacement du stock mère" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "La pièce doit être vendable" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "L'article est affecté à une commande client" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "L'article est attribué à un ordre de fabrication" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Affectation d'articles en stock par le client" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "L'entreprise sélectionnée n'est pas un client" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Notes d'affectation des stocks" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Une liste des articles en stock doit être fournie" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Notes sur les fusions d'actions" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Autoriser les fournisseurs non concordants" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Permettre la fusion d'articles en stock avec des pièces de fournisseurs différents" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Autoriser la non-concordance des statuts" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Permettre la fusion d'articles en stock ayant des codes de statut différents" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Au moins deux articles en stock doivent être fournis" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Pas de changement" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Valeur de la clé primaire StockItem" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "L'article n'est plus en stock" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Notes sur les transactions boursières" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "Numéro de série suivant" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "Numéro de série précédent" @@ -9541,83 +9602,99 @@ msgstr "Ventes" msgid "Return Orders" msgstr "Commandes de retour" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Nom d'utilisateur" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Prénom" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Prénom de l'utilisateur" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Nom" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Nom de famille de l'utilisateur" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Adresse e-mail de l'utilisateur" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Staff" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Cet utilisateur a-t-il les permissions du staff" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Super-utilisateur" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Cet utilisateur est-il un super-utilisateur" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Ce compte d'utilisateur est-il actif" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Seul un superutilisateur peut modifier ce champ" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "Mot de passe" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Mot de passe pour l'utilisateur" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Écraser l'alerte sur les règles de mot de passe" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "Vous n'avez pas le droit de créer des utilisateurs" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Votre compte a été créé." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Veuillez utiliser la fonction de réinitialisation du mot de passe pour vous connecter" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Bienvenue dans InvenTree" diff --git a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po index 8ba2117de8..bdc613530f 100644 --- a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -49,7 +49,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "למשתמש אין הרשאה לצפות במוזל הזה" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "" @@ -104,13 +104,13 @@ msgstr "הזן תאריך סיום" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "" @@ -123,75 +123,91 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "מספרים סידוריים לא נמצאו" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "" @@ -199,7 +215,7 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "אימייל" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "בחירה שגויה" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "שם" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "תיאור" msgid "Description (optional)" msgstr "תיאור (לא חובה)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "נתיב" @@ -320,51 +336,51 @@ msgstr "נרשמה שגיאה על ידי השרת." msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "המספר חייב להיות תקין" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "מטבע" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "בחר מטבע מהאפשרויות הזמינות" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "סינית (פשוטה)" msgid "Chinese (Traditional)" msgstr "סינית (מסורתית)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "" msgid "Not a valid currency code" msgstr "קוד מטבע לא מאושר" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "" @@ -545,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "מקור הבנייה" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "" msgid "Part" msgstr "רכיב" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -653,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -671,32 +687,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -704,26 +720,26 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -845,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -875,7 +891,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" @@ -948,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -964,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1001,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1083,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "מספרים סידוריים" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "מבוטל" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1534,11 +1550,11 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "" @@ -1600,7 +1616,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "משתמש" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "" @@ -1633,10 +1649,10 @@ msgstr "" msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1660,11 +1676,11 @@ msgstr "" msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "" @@ -1714,7 +1730,7 @@ msgstr "" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "" msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "" @@ -1797,7 +1813,7 @@ msgstr "קובץ חסר" msgid "Missing external link" msgstr "חסר קישור חיצוני" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "" @@ -1998,334 +2014,334 @@ msgstr "" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "שם קובץ" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "" @@ -4163,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4181,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4210,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4258,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4307,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4797,27 +4833,27 @@ msgstr "" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4919,413 +4955,421 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "" -#: order/models.py:1800 -msgid "Line item reference" +#: order/models.py:1814 +msgid "Line Number" msgstr "" -#: order/models.py:1807 -msgid "Line item notes" +#: order/models.py:1815 +msgid "Line number for this item (optional)" msgstr "" #: order/models.py:1822 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1829 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "נשלח" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5372,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5797,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5818,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5933,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "" @@ -5966,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8583,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8696,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "שם משתמש" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "שם פרטי" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:240 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po index d9c54dab00..908ad8e3c1 100644 --- a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -49,7 +49,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "" @@ -104,13 +104,13 @@ msgstr "तारीख दर्ज करें" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "" @@ -123,75 +123,91 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "कनेक्शन त्रुटि" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "" @@ -199,7 +215,7 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "ई-मेल" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "" @@ -320,51 +336,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "" @@ -545,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -653,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -671,32 +687,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -704,26 +720,26 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -845,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -875,7 +891,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" @@ -948,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -964,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1001,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1083,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1534,11 +1550,11 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "" @@ -1600,7 +1616,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "" @@ -1633,10 +1649,10 @@ msgstr "" msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1660,11 +1676,11 @@ msgstr "" msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "" @@ -1714,7 +1730,7 @@ msgstr "" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "" msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "" @@ -1797,7 +1813,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "" @@ -1998,334 +2014,334 @@ msgstr "" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "" @@ -4163,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4181,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4210,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4258,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4307,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4797,27 +4833,27 @@ msgstr "" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4919,413 +4955,421 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "" -#: order/models.py:1800 -msgid "Line item reference" +#: order/models.py:1814 +msgid "Line Number" msgstr "" -#: order/models.py:1807 -msgid "Line item notes" +#: order/models.py:1815 +msgid "Line number for this item (optional)" msgstr "" #: order/models.py:1822 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1829 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5372,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5797,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5818,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5933,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "" @@ -5966,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8583,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8696,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:240 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po index 6bb193dee3..2d827d6845 100644 --- a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -49,7 +49,7 @@ msgstr "Nincs adat megadva" msgid "This field must be unique." msgstr "Ennek a mezőnek egyedinek kell lennie." -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Nincs jogosultságod az adatok megtekintéséhez" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "{original} átváltása {unit}-ra sikertelen" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Nem megfelelő mennyiség" @@ -104,13 +104,13 @@ msgstr "Dátum megadása" msgid "Invalid decimal value" msgstr "Érvénytelen decimális érték" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Megjegyzések" @@ -123,75 +123,91 @@ msgstr "A(z) '{name}' érték nem a szükséges minta szerinti" msgid "Provided value does not match required pattern: " msgstr "A megadott érték nem felel meg a szükséges mintának: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Nem lehet 1000 tételnél többet szerializálni" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Üres sorozatszám" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Duplikált sorozatszám" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Érvénytelen csoport: {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Csoport tartomány {group} több mint az engedélyezett ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Nem található sorozatszám" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "A megadott számú egyedi sorozatszám ({n}) meg kell egyezzen a darabszámmal ({q})" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "HTML tag-ek eltávolítása ebből az értékből" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "Az adatban tiltott markdown tartalom található" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Csatlakozási hiba" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "A kiszolgáló érvénytelen státuszkóddal válaszolt" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Kivétel történt" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "A kiszolgáló érvénytelen Content-Length értéket adott" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "A kép mérete túl nagy" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "A kép letöltés meghaladja a maximális méretet" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "A kiszolgáló üres választ adott" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "A megadott URL nem egy érvényes kép fájl" @@ -199,7 +215,7 @@ msgstr "A megadott URL nem egy érvényes kép fájl" msgid "Log in to the app" msgstr "Bejelentkezés az appba" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Email" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Érvénytelen választás" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Név" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Leírás" msgid "Description (optional)" msgstr "Leírás (opcionális)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Elérési út" @@ -320,51 +336,51 @@ msgstr "A kiszolgáló egy hibaüzenetet rögzített." msgid "Image" msgstr "Kép" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Érvényes számnak kell lennie" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Pénznem" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Válassz pénznemet a lehetőségek közül" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Ez a mező nem lehet null." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Érvénytelen érték" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Távoli kép" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "A távoli kép URL-je" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Képek letöltése távoli URL-ről nem engedélyezett" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Nem sikerült letölteni a képet a távoli URL-ről" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "Érvénytelen tartalomtípus-formátum" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "Tartalomtípus nem található" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "A tartalomtípus nem egyezik a szükséges mixin osztállyal" @@ -520,11 +536,11 @@ msgstr "Kínai (egyszerűsített)" msgid "Chinese (Traditional)" msgstr "Kínai (Hagyományos)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Frissítés elérhető" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "InvenTree frissítés elérhető" @@ -536,7 +552,7 @@ msgstr "Érvénytelen fizikai mértékegység" msgid "Not a valid currency code" msgstr "Érvénytelen pénznem kód" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Rendelés állapota" @@ -545,21 +561,21 @@ msgstr "Rendelés állapota" msgid "Parent Build" msgstr "Szülő gyártás" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Változatokkal együtt" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "Változatokkal együtt" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "Változatokkal együtt" msgid "Part" msgstr "Alkatrész" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategória" @@ -653,16 +669,16 @@ msgstr "Fa kihagyása" msgid "Build must be cancelled before it can be deleted" msgstr "A gyártást be kell fejezni a törlés előtt" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Fogyóeszköz" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Opcionális" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Gyártmány" @@ -671,32 +687,32 @@ msgstr "Gyártmány" msgid "Tracked" msgstr "Követett" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Ellenőrizhető" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Befejezetlen rendelés" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Lefoglalva" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Felhasználva" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Elérhető" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Rendelve" @@ -704,26 +720,26 @@ msgstr "Rendelve" msgid "Build not found" msgstr "Gyártás nem található" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Gyártási utasítás" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Hely" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Kimenet" @@ -767,8 +783,8 @@ msgstr "Céldátumnak a kezdeti dátum után kell lennie" msgid "Build Order Reference" msgstr "Gyártási utasítás azonosító" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Vevői rendelés azonosító" msgid "Sales Order to which this build is allocated" msgstr "Vevői rendelés, amelyhez ez a gyártás tartozik" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Forrás hely" @@ -845,16 +861,16 @@ msgstr "Gyártási állapot" msgid "Build status code" msgstr "Gyártás státusz kód" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Batch kód" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Batch kód a gyártás kimenetéhez" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Létrehozás dátuma" @@ -875,7 +891,7 @@ msgstr "Befejezés cél dátuma" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Cél dátum a gyártás befejezéséhez. Ez után késettnek számít majd." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Befejezés dátuma" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Gyártási utasítás priorítása" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Projektszám" @@ -948,7 +964,7 @@ msgstr "A {build} gyártási utasítás elkészült" msgid "A build order has been completed" msgstr "Gyártási utasítás elkészült" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Egyedi követésre jelölt alkatrészeknél kötelező sorozatszámot megadni" @@ -964,23 +980,23 @@ msgstr "Gyártási kimenet már kész" msgid "Build output does not match Build Order" msgstr "Gyártási kimenet nem egyezik a gyártási utasítással" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Mennyiségnek nullánál többnek kell lennie" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "A mennyiség nem lehet több mint a gyártási mennyiség" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "A gyártási kimenet nem felelt meg az összes kötelező teszten" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, 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" @@ -1001,10 +1017,10 @@ msgstr "Gyártási Rendelés Sor Tétel" msgid "Build object" msgstr "Gyártás objektum" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Gyártás objektum" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "Egyedi követésre kötelezett tételeknél a menyiség 1 kell legyen" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "A lefoglalt mennyiség ({q}) nem lépheti túl a szabad készletet ({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "Készlet túlfoglalva" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Készlet tétel" @@ -1083,379 +1099,379 @@ msgstr "Cél készlet tétel" msgid "Build Level" msgstr "Gyártási Szint" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Alkatrész neve" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Gyártás kimenet" -#: build/serializers.py:219 +#: build/serializers.py:226 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:223 +#: build/serializers.py:230 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:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Ez a gyártási kimenet már elkészült" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Ez a gyártási kimenet nincs teljesen lefoglalva" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Add meg a mennyiséget a gyártás kimenetéhez" -#: build/serializers.py:331 +#: build/serializers.py:338 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:337 +#: build/serializers.py:344 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:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Sorozatszámok" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Add meg a sorozatszámokat a gyártás kimenetéhez" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Legyártott készlet helye" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Sorozatszámok automatikus hozzárendelése" -#: build/serializers.py:378 +#: build/serializers.py:385 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:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "A következő sorozatszámok már léteznek vagy nem megfelelőek" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "A gyártási kimenetek listáját meg kell adni" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Selejtezet gyártási kimenetek helye" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Foglalások törlése" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Selejtezett kimenetek foglalásainak felszabadítása" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Selejtezés oka" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "A kész gyártási kimenetek helye" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Hiányos foglalás elfogadása" -#: build/serializers.py:565 +#: build/serializers.py:572 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:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Lefoglalt készlet felhasználása" -#: build/serializers.py:691 +#: build/serializers.py:698 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:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Befejezetlen kimenetek törlése" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "A nem befejezett gyártási kimenetek törlése" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Nem engedélyezett" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Gyártásban fel lett használva" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Foglalás felszabadítása a készre jelentés előtt" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Túlfoglalt készlet" -#: build/serializers.py:757 +#: build/serializers.py:764 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:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Pár készlet tétel túl lett foglalva" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Kiosztatlanok elfogadása" -#: build/serializers.py:775 +#: build/serializers.py:782 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:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "A szükséges készlet nem lett teljesen lefoglalva" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Befejezetlenek elfogadása" -#: build/serializers.py:793 +#: build/serializers.py:800 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:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Szükséges gyártási mennyiség nem lett elérve" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "A Gyártásnak nyitott leszármazott Gyártása van" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "A Gyártásnak folyamatban kell lennie" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "A gyártási utasítás befejezetlen kimeneteket tartalmaz" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Gyártás sor" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Gyártás kimenet" -#: build/serializers.py:877 +#: build/serializers.py:884 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:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Gyártás sor tétel" -#: build/serializers.py:926 +#: build/serializers.py:933 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:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "A tételnek kell legyen készlete" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Rendelkezésre álló mennyiség ({q}) túllépve" -#: build/serializers.py:991 +#: build/serializers.py:998 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:999 +#: build/serializers.py:1006 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:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "A lefoglalandó tételeket meg kell adni" -#: build/serializers.py:1087 +#: build/serializers.py:1094 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:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Hely kizárása" -#: build/serializers.py:1097 +#: build/serializers.py:1104 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:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Felcserélhető készlet" -#: build/serializers.py:1103 +#: build/serializers.py:1110 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:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Készlet helyettesítés" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Helyettesítő alkatrészek foglalásának engedélyezése" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Opcionális tételek" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Opcionális tételek lefoglalása a gyártáshoz" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "Összes elem" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "Nem követett tételek" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "Követett tételek" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "Tétel típusa" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "Válasszon tétel típust az automatikus foglaláshoz" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Alkatrészjegyzék Hivatkozás" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "Alkatrészjegyzék Cikk Azonosító" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Alkatrészjegyzék Alkatrész Név" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "Beépítés helye" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Gyártás" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Beszállítói alkatrész" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Lefoglalt mennyiség" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Gyártási Hivatkozás" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Alkatrész kategória Neve" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Követésre kötelezett" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Örökölt" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Változatok" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Alkatrészjegyzék tétel" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "Gyártásban" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Gyártás Ütemezve" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Külső raktárkészlet" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Elérhető készlet" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Elérhető Helyettesítő Készlet" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Elérhető Készlet Változatokból" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "Felhasznált mennyiség meghaladja a lefoglalt mennyiséget" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "Megjegyzés a készletfelhasználáshoz" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "Gyártási tételnek a megfelelő gyártási rendelésre kell mutatnia" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "Dupla gyártási tétel lefoglalás" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "Gyártási sornak a megfelelő gyártási rendelésre kell mutatnia" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "Duplikált gyártási sor foglalás" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "Legalább egy tétel vagy sor megadása kötelező" @@ -1479,7 +1495,7 @@ msgstr "Felfüggesztve" msgid "Cancelled" msgstr "Törölve" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1503,19 +1519,19 @@ msgstr "Késésben lévő gyártás" msgid "Build order {bo} is now overdue" msgstr "A {bo} gyártás most már késésben van" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "Ez egy hivatkozás" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "Ez egy állomány" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "A felhasználó nem jogosult ezen mellékletek törlésére" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "A felhasználó nem jogosult ezen melléklet törlésére" @@ -1535,11 +1551,11 @@ msgstr "Hiányzó érvényes valuta kód" msgid "No plugin" msgstr "Nincsen plugin" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Projekt kód címke" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Frissítve" @@ -1601,7 +1617,7 @@ msgstr "Kulcs string egyedi kell legyen" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1613,8 +1629,8 @@ msgstr "Felhasználó" msgid "Price break quantity" msgstr "Ársáv mennyiség" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Ár" @@ -1634,10 +1650,10 @@ msgstr "Végpont ahol ez a webhook érkezik" msgid "Name for this webhook" msgstr "Webhook neve" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktív" @@ -1661,11 +1677,11 @@ msgstr "Titok" msgid "Shared secret for HMAC" msgstr "Megosztott titok a HMAC-hoz" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "Üzenet azonosító" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "Egyedi azonosító ehhez az üzenethez" @@ -1715,7 +1731,7 @@ msgstr "Cím" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1733,7 +1749,7 @@ msgstr "Szerző" msgid "Summary" msgstr "Összefoglaló" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Elolvasva" @@ -1798,7 +1814,7 @@ msgstr "Hiányzó fájl" msgid "Missing external link" msgstr "Hiányzó külső link" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "Modell típusa" @@ -1834,7 +1850,7 @@ msgstr "Fájl mérete" msgid "File size in bytes" msgstr "Fájlméret bájtban" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "A melléklet model típusa érvénytelen" @@ -1862,7 +1878,7 @@ msgstr "Logikai kulcs" msgid "State logical key that is equal to this custom state in business logic" msgstr "Az állapot logikai kulcsa amely megegyezik az üzleti logika egyedi állapotával" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Érték" @@ -1875,7 +1891,7 @@ msgstr "A model adatbázisba tárolandó szám" msgid "Name of the state" msgstr "Az állapot neve" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Címke" @@ -1931,7 +1947,7 @@ msgstr "A logikai kulcsnak szerepelnie kell a hivatkozott állapotok logikai kul msgid "Name must be different from the names of the reference status" msgstr "A Névnek el kell térnie a referencia állapotok neveitől" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "Választéklista" @@ -1983,7 +1999,7 @@ msgstr "Alapértelmezett bejegyzés" msgid "Default entry for this selection list" msgstr "Alapértelmezett elem ezen a listán" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Létrehozva" @@ -1999,334 +2015,334 @@ msgstr "Utoljára módosítva" msgid "Date and time that the selection list was last updated" msgstr "A választéklista utolsó módosításának dátuma és ideje" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "Választéklista bejegyzés" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "Választéklista bejegyzések" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "Választéklista amihez ez a bejegyzés tartozik" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "Választéklista bejegyzés értéke" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "Választéklista bejegyzés felirata" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "Választéklista bejegyzés leírása" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "Választéklista bejegyzés aktív?" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "Paraméter sablon" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "Paraméter Sablonok" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "Jelölőnégyzet paraméternek nem lehet mértékegysége" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "Jelölőnégyzet paraméternek nem lehetnek választási lehetőségei" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "A lehetőségek egyediek kell legyenek" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "A paraméter sablon nevének egyedinek kell lennie" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "Célmodell típusa ehhez a paramétersablonhoz" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "Paraméter neve" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "Mértékegység" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "Paraméter mértékegysége" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "Paraméter leírása" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "Jelölőnégyzet" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "Ez a paraméter egy jelölőnégyzet?" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "Lehetőségek" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "Választható lehetőségek (vesszővel elválasztva)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "A paraméter választéklistája" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Engedélyezve" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "Ez a paramétersablon engedélyezett?" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "Paraméter" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "Paraméterek" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "Hibás választás a paraméterre" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Érvénytelen modelltípus megadva a paraméterhez" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "Modell ID" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "A célmodell azonosítója ehhez a paraméterhez" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Sablon" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "Paraméter sablon" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Adat" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "Paraméter értéke" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Megjegyzés" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Opcionális megjegyzés mező" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "Vonalkód beolvasás" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "Vonalkód adat" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "Melyik felhasználó olvasta be a vonalkódot" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "Időbélyeg" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "Vonalkód beolvasás dátuma és ideje" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "Vonalkód feldolgozó URL végpont" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "Kontextus" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "Vonalkód olvasás kontextus adat" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "Válasz" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "Vonalkód olvasó válasz adat" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Eredmény" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "Vonalkód olvasás sikeres volt?" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "Hiba történt" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: Email napló törlés védett. Állítsd be az INVENTREE_PROTECT_EMAIL_LOG-ot False-ra hogy engedélyezd a törlést." -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "E-mail üzenet" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "E-mail üzenetek" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "Bejelentve" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "Elküldve" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "Megbukott" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "Kiszállítva" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "Megerősítve" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "Bejövő" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "Kimenő" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "Nincs válasz" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "Kiszállítás követése" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "Olvasási visszaigazolás" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "Kattintások nyomkövetése" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "Globális ID" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "Üzenet azonosítója (külső rendszertől származhat)" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "Szál ID" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Üzenet-sor azonosító (külső rendszerből származhat)" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "Szál" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "Ehhez az üzenethez kapcsolódó üzenet-lánc" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "Prioritás" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "Email szál" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "Email szálak" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Kulcs" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "Az üzenetlánc egyedi azonosítója (az üzenetlánc azonosítására szolgál)" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "Üzenetlánc egyedi azonosítója" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "Belső kezdés" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "Ez az üzenetlánc belül indult?" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "Az üzenetlánc kezdeti dátuma és ideje" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "Az üzenetlánc utolsó módosításának dátuma és ideje" @@ -2376,1243 +2392,1259 @@ msgstr "Ez a beállítás felül van bírálva egy környezeti változó által" msgid "Override" msgstr "Felülbírálás" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Folyamatban" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Folyamatban lévő feladatok" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Ütemezett Feladatok" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Hibás feladatok" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Feladat ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Egyedi feladat ID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Zárol" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Zárolási idő" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Feladat neve" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funkció" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Funkció neve" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Paraméterek" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Feladat paraméterei" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Kulcsszó paraméterek" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Feladat kulcsszó paraméterek" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Fájlnév" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Modell típusa" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "A felhasználónak nincs joga létrehozni vagy módosítani ehhez a modelhez tartozó mellékleteket" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "A felhasználónak nincs jogosultsága paraméterek létrehozására vagy szerkesztésére ehhez a modellhez" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Választéklista lezárva" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Nincs csoport" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "A site URL blokkolva van a konfigurációban" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Újraindítás szükséges" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Egy olyan beállítás megváltozott ami a kiszolgáló újraindítását igényli" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Függőben levő migrációk" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Függőben levő adatbázis migrációk" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Aktív figyelmeztető kódok" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "Aktív figyelmeztető kódok dict-je" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "Példány azonosító" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Az InvenTree példány egyedi azonosítója" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "Bejelentési ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Azonosítsa-e magát az szerver a példányazonosítóval a szerver állapotban (authentikáció nélkül)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Kiszolgáló példány neve" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "String leíró a kiszolgáló példányhoz" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Példány név használata" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Példány név használata a címsorban" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Verzió infók megjelenítésének tiltása" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Verzió infók megjelenítése csak admin felhasználóknak" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Cég neve" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "Belső cégnév" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "Kiindulási URL" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "Kiindulási URL a kiszolgáló példányhoz" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Alapértelmezett pénznem" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "Válassz alap pénznemet az ár számításokhoz" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "Támogatott valuták" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "Támogatott valuták listája" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "Árfolyam frissítési gyakoriság" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Milyen gyakran frissítse az árfolyamokat (nulla a kikapcsoláshoz)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "nap" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "Árfolyam frissítő plugin" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "Kiválasztott árfolyam frissítő plugin" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "Letöltés URL-ről" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "Képek és fájlok letöltésének engedélyezése külső URL-ről" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "Letöltési méret korlát" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "Maximum megengedett letöltési mérete a távoli képeknek" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "Felhasznált User-agent az URL-ről letöltéshez" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "A külső URL-ről letöltéshez használt user-agent felülbírálásának engedélyezése (hagyd üresen az alapértelmezéshez)" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "Erős URL validáció" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "Sablon specifikáció igénylése az URL validálásnál" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "Frissítés keresés gyakorisága" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "Milyen gyakran ellenőrizze van-e új frissítés (0=soha)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Automatikus biztonsági mentés" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "Adatbázis és média fájlok automatikus biztonsági mentése" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "Automata biztonsági mentés gyakorisága" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "Hány naponta készüljön automatikus biztonsági mentés" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "Feladat törlési gyakoriság" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "Háttérfolyamat eredmények törlése megadott nap eltelte után" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "Hibanapló törlési gyakoriság" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "Hibanapló bejegyzések törlése megadott nap eltelte után" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "Értesítés törlési gyakoriság" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "Felhasználói értesítések törlése megadott nap eltelte után" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "Email törlési gyakoriság" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "Email üzenetek törlése megadott nap eltelte után" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "Email napló védett" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "Megakadályozza az email napló bejegyzések törlését" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Vonalkód támogatás" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "Vonalkód olvasó támogatás engedélyezése a web felületen" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "Vonalkód olvasás eredmények tárolása" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "Vonalkód olvasási eredmények tárolása az adatbázisban" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "Maximálisan tárolt vonalkód olvasások mennyisége" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "Maximálisan tárolt vonalkód olvasások száma" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "Vonalkód beadási késleltetés" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "Vonalkód beadáskor a feldolgozás késleltetési ideje" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "Webkamerás vonalkód olvasás" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "Webkamerás kódolvasás engedélyezése a böngészőből" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "Vonalkód Adat Megjelenítése" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "Vonalkód adat megjelenítése a böngészőben szövegként" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "Vonalkód Generáló Plugin" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "Belső vonalkód generálásra használatos plugin" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "Alkatrész változatok" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "Alkatrész változat vagy verziószám tulajdonság használata" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "Csak Összeállítás Verzió" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "Csak összeállított alkatrészeknek lehessen verziója" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "Lehessen törölni az Összeállításból" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "Lehessen olyan alkatrészt törölni ami Összeállításban szerepel" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "IPN reguláris kifejezés" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "Reguláris kifejezés ami illeszkedik az alkatrész IPN-re" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "Többször is előforduló IPN engedélyezése" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "Azonos IPN használható legyen több alkatrészre is" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "IPN szerkesztésének engedélyezése" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "IPN megváltoztatásánsak engedélyezése az alkatrész szerkesztése közben" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "Alkatrészjegyzék adatok másolása" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "Alkatrész másoláskor az alkatrészjegyzék adatokat is másoljuk alapból" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "Alkatrész paraméterek másolása" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "Alkatrész másoláskor a paramétereket is másoljuk alapból" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "Alkatrész teszt adatok másolása" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "Alkatrész másoláskor a tesztek adatait is másoljuk alapból" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "Kategória paraméter sablonok másolása" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "Kategória paraméter sablonok másolása alkatrész létrehozásakor" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "Alkatrészek alapból sablon alkatrészek legyenek" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "Alkatrészeket alapból lehessen gyártani másik alkatrészekből" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Összetevő" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "Alkatrészek alapból használhatók összetevőként más alkatrészekhez" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Beszerezhető" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "Alkatrészek alapból beszerezhetők legyenek" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Értékesíthető" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "Alkatrészek alapból eladhatók legyenek" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "Alkatrészek alapból követésre kötelezettek legyenek" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Virtuális" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "Alkatrészek alapból virtuálisak legyenek" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "Kapcsolódó alkatrészek megjelenítése" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "Alkatrész kapcsolódó alkatrészeinek megjelenítése" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "Kezdeti készlet adatok" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "Kezdeti készlet létrehozása új alkatrész felvételekor" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "Kezdeti beszállítói adatok" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Kezdeti beszállítói adatok létrehozása új alkatrész felvételekor" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "Alkatrész név megjelenítés formátuma" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "Formátum az alkatrész név megjelenítéséhez" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "Alkatrész kategória alapértelmezett ikon" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "Alkatrész kategória alapértelmezett ikon (üres ha nincs)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "Áraknál használt tizedesjegyek min. száma" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Tizedejegyek minimális száma az árak megjelenítésekor" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "Áraknál használt tizedesjegyek max. száma" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Tizedejegyek maximális száma az árak megjelenítésekor" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "Beszállítói árazás használata" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Beszállítói ársávok megjelenítése az általános árkalkulációkban" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "Beszerzési előzmények felülbírálása" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Beszerzési árelőzmények felülírják a beszállítói ársávokat" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "Készlet tétel ár használata" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "A kézzel bevitt készlet tétel árak használata az árszámításokhoz" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "Készlet tétel ár kora" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Az ennyi napnál régebbi készlet tételek kizárása az árszámításból" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "Alkatrészváltozat árak használata" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "Alkatrészváltozat árak megjelenítése az általános árkalkulációkban" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "Csak az aktív változatokat" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "Csak az aktív alkatrészváltozatok használata az árazásban" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "Árazás automatikus frissítése" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "Alkatrész árazás automatikus frissítése belső adat változáskor" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "Árazás újraszámítás gyakoriság" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "Árak automatikus frissítése ennyi nap után" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Belső árak" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "Alkatrészekhez belső ár engedélyezése" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "Belső ár felülbírálása" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "Ha elérhetőek az árkalkulációkban a belső árak lesznek alapul véve" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "Nulla mennyiség engedélyezése az anyagjegyzékben" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "Címke nyomtatás engedélyezése" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "Címke nyomtatás engedélyezése a web felületről" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "Címke kép DPI" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Képek felbontása amik átadásra kerülnek címkenyomtató pluginoknak" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Riportok engedélyezése" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "Riportok előállításának engedélyezése" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "Debug mód" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "Riportok előállítása HTML formátumban (hibakereséshez)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "Jelentési hibák naplózása" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "Jelentések generálása közben jelentkező hibák naplózása" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Lapméret" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "Alapértelmezett lapméret a PDF riportokhoz" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "Csak választható mértékegységek" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "A megadott mértékegység csak a beállított lehetőségekből legyen elfogadva" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "Globálisan egyedi sorozatszámok" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "A sorozatszámoknak egyedinek kell lennie a teljes készletre vonatkozóan" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "Kimerült készlet törlése" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "Alapértelmezett művelet mikor a készlet tétel elfogy" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "Batch kód sablon" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "Sablon a készlet tételekhez alapértelmezett batch kódok előállításához" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "Készlet lejárata" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "Készlet lejárat kezelésének engedélyezése" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "Lejárt készlet értékesítése" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "Lejárt készlet értékesítésének engedélyezése" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "Álló készlet ideje" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "Napok száma amennyivel a lejárat előtt a készlet tételeket állottnak vesszük" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "Lejárt készlet gyártása" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "Gyártás engedélyezése lejárt készletből" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "Készlet tulajdonosok kezelése" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "Tulajdonosok kezelésének engedélyezése a készlet helyekre és tételekre" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "Hely alapértelmezett ikon" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "Hely alapértelmezett ikon (üres ha nincs)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "Beépített készlet megjelenítése" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "Beépített készlet tételek megjelenítése a készlet táblákban" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "Tételek telepítésekor a darabjegyzék ellenőrzése" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "A beépített tételeknek a szülő elem darabjegyzékében szerepelniük kell" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "Lehet Hiányzó Készletet Mozgatni" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Lehet-e olyan készleteket mozgatni készlethelyek között amik nincsenek raktáron" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "Gyártási utasítás azonosító minta" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "Szükséges minta a gyártási utasítás azonosító mező előállításához" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "Felelős tulajdonos szükséges" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "Minden rendeléshez felelőst kell rendelni" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "Szükséges Aktív Alkatrész" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "Inaktív alkatrészekre nem lehet Gyártási Rendelést létrehozni" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "Elvárás a Lezárt Alkatrész" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "Megakadályozza, hogy nem lezárt alkatrészekre gyártási rendelést lehessen indítani" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "Jóváhagyott Alkatrészjegyzék Kötelező" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "Megakadályozza gyártási rendelés készítését ha nincsen az Alkatrészjegyzék jóváhagyva" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "Leszármazott Gyártásoknak Lezártnak Kell Lennie" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "Amíg minden leszármazott gyártás le nincsen zárva nem lehet a szülő gyártást lezárni" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "Külső Gyártási Rendelések" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "Engedélyezze a külső gyártási rendelés funkciót" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Blokkolás a tesztek sikeres végrehajtásáig" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Nem lehet gyártási tételt befejezni amíg valamennyi kötelező teszt sikeres nem lett" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "Visszavétel engedélyezése" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "Visszavételek engedélyezése a felületen" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "Visszavétel azonosító minta" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "Szükséges minta a visszavétel azonosító mező előállításához" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "Befejezett visszavétel szerkesztése" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "Visszavétel szerkesztésének engedélyezése befejezés után" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "Vevői rendelés azonosító minta" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "Szükséges minta a vevői rendelés azonosító mező előállításához" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "Vevői rendeléshez alapértelmezett szállítmány" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "Szállítmány automatikus létrehozása az új vevő rendelésekhez" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "Befejezett vevői rendelés szerkesztése" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Vevői rendelések szerkesztésének engedélyezése szállítás vagy befejezés után" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "Szállítmány Ellenőrzést Igényel" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "Megakadályozza a szállítmányok befejezését, amíg a tételeket nem ellenőrizték" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "Leszállított Rendelések Készre jelölése" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Leszállítottnak jelölt Értékesítési rendelések automatikusan Kész-re lesznek állítva, a \"Leszállított\" állapot átugrásával" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "Beszerzési rendelés azonosító minta" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "Szükséges minta a beszerzési rendelés azonosító mező előállításához" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "Befejezett beszerzési rendelés szerkesztése" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Beszérzési rendelések szerkesztésének engedélyezése kiküldés vagy befejezés után" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "Jelenlegi pénznem" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "Tétel érték bázis-pénznemre váltása készlet beérkezéskor" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "Beszerzési rendelések automatikus befejezése" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "A beszerzési rendelés automatikus befejezése ha minden sortétel beérkezett" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Elfelejtett jelszó engedélyezése" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "Elfelejtett jelszó funkció engedélyezése a bejentkező oldalon" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Regisztráció engedélyezése" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "Felhaszálók önkéntes regisztrációjának engedélyezése a bejelentkező oldalon" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "SSO engedélyezése" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "SSO engedélyezése a bejelentkező oldalon" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "SSO regisztráció engedélyezése" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Felhaszálók önkéntes regisztrációjának engedélyezése SSO-n keresztül a bejelentkező oldalon" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "SSO csoport szinkronizálás engedélyezése" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Az InvenTree csoportok szinkronizálása a hitelesítésszolgáltatóhoz" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "SSO csoport kulcs" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "A csoportkérés tulajdonság neve amit a hitelesítésszolgáltató nyújt" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "SSO csoport hozzárendelés" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Az SSO csoportok hozzárendelése az InvenTree csoportokhoz. Ha a helyi csoport nem létezik, létre lesz hozva." -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "Az SSO-n kívüli csoportok eltávolítása" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Ha egy felhasználóhoz rendelt csoport nem létezik az azonosításszolgáltatóban azt eltávolítsuk el. Ennek a kikapcsolása biztonsági problémákhoz vezethet" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "Email szükséges" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "Kötelező email megadás regisztrációkor" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "SSO felhasználók automatikus kitöltése" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "Felhasználó adatainak automatikus kitöltése az SSO fiókadatokból" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "Email kétszer" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "Regisztráláskor kétszer kérdezze a felhasználó email címét" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Jelszó kétszer" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "Regisztráláskor kétszer kérdezze a felhasználó jelszavát" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "Engedélyezett domainek" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Feliratkozás korlátozása megadott domain-ekre (vesszővel elválasztva, @-al kezdve)" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "Csoport regisztráláskor" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Ehhez a csoporthoz lesznek az új felhasználók rendelve. Ha az SSO csoport szinkronizálás engedélyezve van, akkor ez a csoport csak akkor lesz hozzárendelve a felhasználóhoz ha az azonosítás szolgáltató semmilyen csoportot nem rendelt hozzá." -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "Többfaktoros hitelesítés kényszerítése" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "A felhasználóknak többfaktoros hitelesítést kell használniuk." -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "Pluginok ellenőrzése indításkor" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Ellenőrizze induláskor hogy minden plugin telepítve van - engedélyezd konténer környezetben (docker)" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "Plugin frissítések ellenőrzése" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "Frissítések periódikus ellenőrzésének engedélyezése a telepített pluginokra" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "URL integráció engedélyezése" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "URL útvonalalak hozzáadásának engedélyezése a pluginok számára" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "Navigációs integráció engedélyezése" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "Navigációs integráció engedélyezése a pluginok számára" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "App integráció engedélyezése" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "App hozzáadásának engedélyezése a pluginok számára" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "Ütemezés integráció engedélyezése" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "Háttérben futó feladatok hozzáadásának engedélyezése a pluginok számára" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "Esemény integráció engedélyezése" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "Belső eseményekre reagálás engedélyezése a pluginok számára" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "Interfész integráció engedélyezése" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "Pluginok felhasználói felületbe épülésének engedélyezése" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "Email integráció engedélyezése" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Pluginok bejövő/kimenő levelekhez hozzáférésének engedélyezése" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "Projektszámok engedélyezése" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "Projectek nyomkövetéséhez projekt kódok engedélyezése" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "A készletek korábbi mennyiségének és értékének naplózásának engedélyezés" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "Külső helyek nélkül" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "Automatikus leltár időpontja" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "Készlettörténet törlési gyakoriság" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "Felhasználók teljes nevének megjelenítése" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "Felhasználói név helyett a felhasználók teljes neve jelenik meg" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "Felhasználói profilok megjelenítése" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "Felhasználói profilok megjelenítése a profil oldalukon" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "Teszt állomás adatok engedélyezése" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "Tesztállomás adatok gyűjtésének teszt eredménybe gyűjtésének engedélyezése" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "Gép Ping Engedélyezése" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Időszakos ping feladat engedélyezése a regisztrált gépekhez az állapotuk ellenőrzésére" @@ -3957,33 +3989,33 @@ msgstr "Az alkatrész aktív" msgid "Manufacturer is Active" msgstr "A Gyártó Aktív" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "A Szállítói Alkatrész Aktív" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "A saját alkatrész Aktív" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "A Beszállító Aktív" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Gyártó" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Cég" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "Van készleten" @@ -4072,7 +4104,7 @@ msgstr "Adószám" msgid "Company Tax ID" msgstr "Céges adószám" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Cím" @@ -4164,7 +4196,7 @@ msgstr "Szállítási megjegyzések belső használatra" msgid "Link to address information (external)" msgstr "Link a címinformációkhoz (külső)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Gyártói alkatrész" @@ -4182,12 +4214,12 @@ msgstr "Válassz alkatrészt" msgid "Select manufacturer" msgstr "Gyártó kiválasztása" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "MPN (Gyártói cikkszám)" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Gyártói cikkszám" @@ -4211,8 +4243,8 @@ msgstr "Csomagolási mennyiségnek nullánál többnek kell lennie" msgid "Linked manufacturer part must reference the same base part" msgstr "Kapcsolódó gyártói alkatrésznek ugyanarra a kiindulási alkatrészre kell hivatkoznia" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4223,7 +4255,7 @@ msgstr "Beszállító" msgid "Select supplier" msgstr "Beszállító kiválasztása" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Beszállítói cikkszám" @@ -4259,8 +4291,8 @@ msgstr "alap költség" msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimális díj (pl. tárolási díj)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Csomagolás" @@ -4308,14 +4340,18 @@ msgstr "Beszállító által használt alapértelmezett pénznem" msgid "Company Name" msgstr "Cégnév" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Készleten" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "Árkategóriák" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Hiba történt adatexportálás közben" @@ -4420,67 +4456,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "Létező adatbázis azonosító a rekordhoz" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "Oszlop már adatbázis mezőhöz lett rendelve" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Adatbázis mező már adatfájl oszlophoz lett rendelve" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "Az oszlop összerendelésnek egy helyes importálási művelethez kell kapcsolódnia" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "Az Oszlop nem létezik ebben a fájlban" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "A mező nem létezik a cél adatszerkezetben" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Kijelölt mező csak olvasható" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Importálási művelet" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Mező" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Oszlop" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Sor száma" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Eredeti sor adat" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Hibák" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Érvényes" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "ID-ra van szükség meglévő rekord frissítéshez." -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "Nem található rekord a megadott ID-vel" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "Érvénytelen az ID formátuma" @@ -4580,7 +4616,7 @@ msgstr "Címkénkénti nyomtatandó mennyiség" msgid "Connected" msgstr "Csatlakoztatba" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Ismeretlen" @@ -4712,7 +4748,7 @@ msgstr "Maximális érték az előrehaladás típushoz, kötelező ha típus=el msgid "Order Reference" msgstr "Rendelés azonosítója" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Kintlévő" @@ -4768,11 +4804,11 @@ msgstr "" msgid "Has Pricing" msgstr "Van árazás" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Ez előtt befejezve" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Befejezve ez után" @@ -4780,17 +4816,17 @@ msgstr "Befejezve ez után" msgid "External Build Order" msgstr "Külső Gyártási Rendelés" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "Rendelés" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "A rendelés teljesítve" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Belső alkatrész" @@ -4798,27 +4834,27 @@ msgstr "Belső alkatrész" msgid "Order Pending" msgstr "A rendelés függőben" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Kész" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Van kiszállítás" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Beszerzési rendelés" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4826,8 +4862,8 @@ msgstr "Beszerzési rendelés" msgid "Sales Order" msgstr "Vevői rendelés" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4871,11 +4907,11 @@ msgstr "A cím nem egyezik a kiválasztott vállalattal" msgid "Order description (optional)" msgstr "Rendelés leírása (opcionális)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "Válassz projektszámot ehhez a rendeléshez" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "Link külső weboldalra" @@ -4887,7 +4923,7 @@ msgstr "Kezdés dátuma" msgid "Scheduled start date for this order" msgstr "A tervezett kezdeti dátum ehhez a gyártáshoz" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Cél dátum" @@ -4920,413 +4956,421 @@ msgstr "Kapcsolattartó ehhez a rendeléshez" msgid "Company address for this order" msgstr "Cég címei ehhez a rendeléshez" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "Rendelés azonosító" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Állapot" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "Beszerzési rendelés állapota" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "Cég akitől a tételek beszerzésre kerülnek" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "Beszállítói azonosító" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "Beszállítói rendelés azonosító kód" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "érkeztette" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "Rendelés teljesítési dátuma" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "Cél" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "Beérkezett tételek tárolója" -#: order/models.py:738 +#: order/models.py:751 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:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "Sortétel nem egyezik a beszerzési megrendeléssel" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "Sortételen hiányzik a kapcsolódó alkatrész" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "Mennyiség pozitív kell legyen" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Vevő" -#: order/models.py:1350 +#: order/models.py:1363 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:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "Értékesítési rendelés állapot" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "Vevői azonosító " -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "Megrendelés azonosító kódja a vevőnél" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "Kiszállítás dátuma" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "szállította" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "Rendelés már teljesítve" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "Rendelés már visszavonva" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "Csak nyitott rendelés jelölhető késznek" -#: order/models.py:1450 +#: order/models.py:1463 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:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "A rendelést nem lehet befejezni mert hiányos foglalások vannak" -#: order/models.py:1464 +#: order/models.py:1477 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:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "A rendelés le van zárva és nem lehet módosítani" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "Tétel mennyiség" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1822 msgid "Line item reference" msgstr "Sortétel azonosító" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "Sortétel megjegyzései" -#: order/models.py:1822 +#: order/models.py:1844 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:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "Sortétel leírása (opcionális)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "További kontextus ehhez a sorhoz" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "Egységár" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "Vevői Rendelés Sortétel" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "Beszállítói alkatrésznek egyeznie kell a beszállítóval" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "Gyártási rendelést külsőnek kell jelölni" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "Gyártási rendeléseket csak összeszerelhető alkatrészekhez lehet kapcsolni" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "Gyártási rendelés alkatrészének meg kell egyeznie a sortétel alkatrésszel" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "Beszállítói alkatrész" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "Beérkezett" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "Érkezett tételek száma" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Beszerzési ár" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "Beszerzési egységár" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "Külső gyártási rendelés amit ez a sortétel teljesít" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "Vevői Rendelés Extra Sor" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "Vevői Rendelés Sortétel" -#: order/models.py:2121 +#: order/models.py:2143 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:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Eladási ár" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "Eladási egységár" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Kiszállítva" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "Szállított mennyiség" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "Vevői Rendelés Szállítása" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "A szállítási címnek egyeznie kell az ügyféllel" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "Szállítási cím ehhez a szállítmányhoz" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "Szállítás dátuma" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "Szállítási dátum" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "Kézbesítés dátuma" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "Ellenőrizte" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "Felhasználó aki ellenőrizte ezt a szállítmányt" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Szállítmány" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "Szállítmány száma" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "Nyomkövetési szám" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "Szállítmány nyomkövetési információ" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "Számlaszám" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "Hozzátartozó számla referencia száma" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "Szállítmány már elküldve" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "Szállítmány nem tartalmaz foglalt készlet tételeket" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "A szállítmányt ellenőrizni kell, mielőtt befejezhetné" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "Vevői Rendelés Extra Sor" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "Vevői rendeléshez foglalások" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "Készlet tétel nincs hozzárendelve" -#: order/models.py:2548 +#: order/models.py:2577 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:2551 +#: order/models.py:2580 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:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "A lefoglalandó mennyiség nem haladhatja meg a készlet mennyiségét" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "Lefoglalt mennyiségnek nullánál többnek kell lennie" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 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:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "Vevői rendelés nem egyezik a szállítmánnyal" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Szállítmány nem egyezik a vevői rendeléssel" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Sor" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "Vevői rendelés szállítmány azonosító" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "Tétel" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "Válaszd ki a foglalásra szánt készlet tételt" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "Készlet foglalási mennyiség megadása" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "Visszavétel azonosító" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "Cég akitől a tételek visszavételre kerülnek" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "Visszavétel állapota" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "Visszavétel sortétel" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "Készlettételt meg kell adni" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "Visszavétel mennyisége meghaladja a készletet" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "Visszavétel mennyisége nullánál nagyobb kell, hogy legyen" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "Érvénytelen mennyiség szerializált készlettételnél" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "Válaszd ki a vevőtől visszavenni kívánt tételt" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "Visszavétel dátuma" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "Kimenetel" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "Sortétel végső kimenetele" -#: order/models.py:3072 +#: order/models.py:3101 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:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "Visszavétel extra tétel" @@ -5354,7 +5398,7 @@ msgstr "Extra sorok másolása" msgid "Copy extra line items from the original order" msgstr "Az eredeti rendelés extra tételeinek másolása" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Paraméterek másolása" @@ -5373,216 +5417,216 @@ msgstr "Sortételek" msgid "Completed Lines" msgstr "Kész sorok" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Rendelés duplikálása" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Rendelés másolás beállításai" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "Érvénytelen rendelés ID" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Beszállító neve" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "A rendelést nem lehet törölni" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 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:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "A rendelésben teljesítetlen sortételek vannak" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "A rendelés nem nyitott" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Automata árazás" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Beszerzési ár automatikus számítása a beszállítói alkatrész adatai alapján" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Beszérzési ár pénzneme" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Elemek összevonása" -#: order/serializers.py:689 +#: order/serializers.py:728 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:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU (leltári azonosító)" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Belső cikkszám" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Belső cikkszám" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Beszállítói alkatrészt meg kell adni" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Beszerzési rendelést meg kell adni" -#: order/serializers.py:745 +#: order/serializers.py:784 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:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "A beszerzési rendelésnek egyeznie kell a beszállítóval" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Sortétel" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Válassz cél helyet a beérkezett tételeknek" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Írd be a batch kódját a beérkezett tételeknek" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Lejárati dátum" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Írd be a beérkező készlet tételek lejárati dátumát" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Írd be a sorozatszámokat a beérkezett tételekhez" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Bejövő készlettételek csomagolási információjának felülbírálata" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Kiegészítő megjegyzés beérkező készlettételekhez" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Vonalkód" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Beolvasott vonalkód" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Ez a vonalkód már használva van" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Sortételt meg kell adni" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "A cél helyet kötelező megadni" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Megadott vonalkódoknak egyedieknek kel lenniük" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Szállítások" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Kész szállítmányok" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Eladási ár pénzneme" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Foglalt tételek" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Nincsenek szállítmány részletek megadva" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Sortétel nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Mennyiség pozitív kell legyen" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Írd be a sorozatszámokat a kiosztáshoz" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Szállítmány kiszállítva" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Szállítmány nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Nincs találat a következő sorozatszámokra" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Az alábbi sorozatszámok nem elérhetők" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Visszavétel sortétel" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Sortétel nem egyezik a visszavétellel" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "A sortétel már beérkezett" -#: order/serializers.py:2043 +#: order/serializers.py:2156 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:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Visszaküldési mennyiség" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Sortétel pénzneme" @@ -5798,7 +5842,7 @@ msgstr "Ebben a kategóriában évő alkatrészek kulcsszavai alapban" msgid "Icon" msgstr "Ikon" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikon (opcionális)" @@ -5819,7 +5863,7 @@ msgstr "Alapértelmezett érték" msgid "Default Parameter Value" msgstr "Alapértelmezett paraméter érték" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Alkatrészek" @@ -5934,7 +5978,7 @@ msgstr "Alkatrész kulcsszavak amik segítik a megjelenést a keresési eredmén msgid "Part category" msgstr "Alkatrész kategória" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN (Belső Cikkszám)" @@ -5943,7 +5987,7 @@ msgstr "IPN (Belső Cikkszám)" msgid "Part revision or version number" msgstr "Alkatrész változat vagy verziószám (pl. szín, hossz, revízió, stb.)" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Változat" @@ -5967,7 +6011,7 @@ msgstr "Alapértelmezett lejárat" msgid "Expiry time (in days) for stock items of this part" msgstr "Lejárati idő (napban) ennek az alkatrésznek a készleteire" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimális készlet" @@ -6448,355 +6492,355 @@ msgstr "Alkatrész kapcsolat nem hozható létre önmagával" msgid "Duplicate relationship already exists" msgstr "Már létezik duplikált alkatrész kapcsolat" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Szülő Kategória" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Felsőbb szintű alkatrész kategória" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Alkategóriák" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Eredmények" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Eszerint a sablon szerint rögzített eredmények száma" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Beszerzési pénzneme ennek a készlet tételnek" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "A fájl nem kép" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Eredeti alkatrész" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Válassz eredeti alkatrészt a másoláshoz" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Kép másolása" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Kép másolása az eredeti alkatrészről" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Alkatrészjegyzék másolása" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Alkatrészjegyzék másolása az eredeti alkatrészről" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Paraméterek másolása az eredeti alkatrészről" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Megjegyzések másolása" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Megjegyzések másolása az eredeti alkatrészről" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "Teszt másolása" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "Teszt sablonok másolása az eredeti alkatrészről" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Kezdeti készlet mennyiség" -#: part/serializers.py:448 +#: part/serializers.py:451 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:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Kezdeti készlet hely" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Add meg a kezdeti készlet helyét" -#: part/serializers.py:473 +#: part/serializers.py:476 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:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Válassz gyártót (hagyd üresen ha nem kell létrehozni)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Gyártói cikkszám" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "A kiválasztott cég nem érvényes beszállító" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "A kiválasztott cég nem érvényes gyártó" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Van már ilyen gyártói alkatrész" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Van már ilyen beszállítói alkatrész" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Kategória neve" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Gyártásban" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "Az alkatrészből jelenleg ennyi van gyártás alatt" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Már beütemezett de még nem kész gyártási mennyiség" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Készlet tételek" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Verziók" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Teljes készlet" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Nem lefoglalt készlet" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Variánsok Raktárkészlet" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Alkatrész másolása" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Kezdeti adatok másolása egy másik alkatrészről" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Kezdeti készlet" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Kezdeti készlet mennyiség létrehozása" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Beszállító információ" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Kezdeti beszállító adatok hozzáadása" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Kategória paraméterek másolása" -#: part/serializers.py:966 +#: part/serializers.py:993 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:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Meglévő kép" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "A meglévő alkatrész képfájl neve" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "A képfájl nem létezik" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Teljes alkatrészjegyzék jóváhagyása" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Gyártható" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "Gyártásokhoz szükséges" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "Gyártási rendelésekhez foglalva" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "Értékesítési rendeléshez szükséges" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "Értékesítési rendeléshez lefoglalva" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Minimum ár" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Számított minimum ár felülbírálása" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Minimum ár pénzneme" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Maximum ár" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Számított maximum ár felülbírálása" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Maximum ár pénzneme" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Frissítés" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Alkatrész árak frissítése" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, 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:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "A Minimum ár nem lehet nagyobb mint a Maximum ár" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "A Maximum ár nem lehet kisebb mint a Minimum ár" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Szülő összeállítás kiválasztása" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Összetevő alkatrész kijelölése" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Válassz alkatrészt ahonnan az alkatrészjegyzéket másoljuk" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Létező adat törlése" -#: part/serializers.py:1936 +#: part/serializers.py:2000 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:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Örököltekkel együtt" -#: part/serializers.py:1942 +#: part/serializers.py:2006 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:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Hibás sorok kihagyása" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Engedély a hibás sorok kihagyására" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Helyettesítő alkatrészek másolása" -#: part/serializers.py:1954 +#: part/serializers.py:2018 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" @@ -7517,7 +7561,7 @@ msgstr "Szegély" msgid "Print a border around each label" msgstr "Az egyes címkék körüli margó" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "Fekvő" @@ -7597,64 +7641,77 @@ msgstr "TME vonalkódok támogatása" msgid "The Supplier which acts as 'TME'" msgstr "A 'TME' beszállító" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Csak a személyzeti felhasználók adminisztrálhatják a pluginokat" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "Plugin telepítés letiltva" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Plugin telepítése sikeres" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Plugin telepítve ide: {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "Ez a plugin nem található a tárolóban" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "A plugin nem egy csomagolt plugin" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Plugin csomag neve nem található" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Csak a személyzeti felhasználók adminisztrálhatják a pluginokat" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "Plugin eltávolítás letiltva" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "Plugin nem eltávolítható mivel még aktív" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "Kötelező plugint nem lehet uninstallálni" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "Plugin nem uninstallálható mert mintaplugin" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "Plugin nem uninstallálható mert beépített plugin" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "Plugin nincs telepítve" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Plugin telepítés nem található" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Plugin eltávolítása sikeres" @@ -7901,55 +7958,55 @@ msgstr "Tlepítés nincs megerősítve" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Teljes újratöltés" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "A plugin tárolók teljes újratöltése" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Kényszerített újratöltés" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 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:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Pluginok begyűjtése" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Pluginok begyűjtése és a tárolóhoz adása" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Plugin aktiválása" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Plugin bekapcsolása" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "Kötelező plugint nem lehet kikapcsolni" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Konfiguráció törlése" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Plugin konfiguráció törlése az adatbázisból" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "Melyik felhasználóra érvényes ez a beállítás" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "Tételek" @@ -7965,7 +8022,7 @@ msgstr "Plugin nem támogatja a címkenyomtatást" msgid "Invalid label dimensions" msgstr "Érvénytelen címke méretek" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "Nincs érvényes tétel megadva a sablonhoz" @@ -7989,152 +8046,156 @@ msgstr "„Letter” méret" msgid "Template file with this name already exists" msgstr "Ilyen nevű Sablon fájl már létezik" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "Sablon neve" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "Sablon leírása" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "Verziószám (automatikusan nő)" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "A nyomtatáson a modelhez kapcsolás" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "Jelentés kimenetének mentése mellékletként a kapcsolt model példányhoz nyomtatáskor" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "Fájlnév minta" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "Minta a fájlnevek előállításához" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "Sablon engedélyezve" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "A sablon által célzott model típus" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Szűrők" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "Sablon lekérdezés szűrők (vesszővel elválasztott kulcs=érték párok)" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "Sablon file" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "Lapméret a PDF riportokhoz" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "Jelentés fekvő nézetben" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "Összevonás" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "Jelentés renderelése a kiválasztott tételekhez" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "Jelentés a {self.name} sablon alapján" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "Szintaxis hiba a sablonban" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "Hiba a jelentés renderelésekor" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "Hiba a jelentés generálása során" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "Hiba a jelentés kimenetének összefésülése során" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Szélesség [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "Címke szélessége, mm-ben" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Magasság [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "Címke magassága, mm-ben" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "Címkenyomtatási hiba" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "Részlet" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "Riport részlet fájl" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "Részlet fájl leírása" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "Eszköz" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "Riport asset fájl" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "Asset fájl leírása" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "Riport sablon kiválasztása" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "A jelentésben levő tételek azonosítója" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "Címke sablon választás" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "Nyomtató plugin" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "Címkenyomtató plugin kiválasztása" @@ -8232,7 +8293,7 @@ msgstr "Készlet tétel teszt riport" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Beépített tételek" @@ -8289,7 +8350,7 @@ msgstr "" 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:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "company_image elem csak cég példánynál használható" @@ -8305,7 +8366,7 @@ msgstr "Csúcs készlethelyre szűrés" msgid "Include sub-locations in filtered results" msgstr "Szűrt eredmények tartalmazzák az alhelyeket" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Szülő hely" @@ -8389,7 +8450,7 @@ msgstr "Lejárat előtt" msgid "Expiry date after" msgstr "Lejárat után" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Állott" @@ -8523,7 +8584,7 @@ msgstr "Alkatrész kiválasztása kötelező" msgid "Stock items cannot be located into structural stock locations!" msgstr "A szerkezeti raktári helyre nem lehet készletet felvenni!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Virtuális alkatrészből nem lehet készletet létrehozni" @@ -8568,7 +8629,7 @@ msgstr "Válassz egy egyező beszállítói alkatrészt ehhez a készlet tételh msgid "Where is this stock item located?" msgstr "Hol található ez az alkatrész?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "A csomagolása ennek a készlet tételnek itt van tárolva" @@ -8584,7 +8645,7 @@ msgstr "Ez a tétel be van építve egy másik tételbe?" msgid "Serial number for this item" msgstr "Sorozatszám ehhez a tételhez" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Batch kód ehhez a készlet tételhez" @@ -8697,7 +8758,7 @@ msgstr "Készlet tétel gyártás alatt" msgid "Serialized stock cannot be merged" msgstr "Követésre kötelezett készlet nem vonható össze" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Duplikált készlet tételek vannak" @@ -8821,7 +8882,7 @@ msgstr "Válassza ki az alkatrészt amihez sorozatszámot akar generálni" msgid "Quantity of serial numbers to generate" msgstr "Hány sorozatszámot generáljunk" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "Az eredmény Teszt sablonja" @@ -8845,222 +8906,222 @@ msgstr "Szülő tétel" msgid "Parent stock item" msgstr "Szülő készlet tétel" -#: stock/serializers.py:451 +#: stock/serializers.py:454 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:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "Csomagméret használata" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Írd be a sorozatszámokat az új tételekhez" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Beszállítói Cikkszám" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Lejárt" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Gyermek tételek" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "Nyilvántartott tételek" -#: stock/serializers.py:654 +#: stock/serializers.py:668 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:692 +#: stock/serializers.py:706 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:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "Nincsen készlettétel megadva" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, 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:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Cél készlet hely" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Sorozatszámokat nem lehet hozzárendelni ehhez az alkatrészhez" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "A sorozatszámok már léteznek" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Válaszd ki a beépítésre szánt készlet tételt" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Beépítendő mennyiség" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Adja meg a beépítendő mennyiséget" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Tranzakció megjegyzés hozzáadása (opcionális)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "A beépítendő mennyiség legalább 1 legyen" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Készlet tétel nem elérhető" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "A kiválasztott alkatrész nincs az alkatrészjegyzékben" -#: stock/serializers.py:869 +#: stock/serializers.py:883 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:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Cél hely a kiszedett tételeknek" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Válassz alkatrészt amire konvertáljuk a készletet" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "A kiválasztott alkatrész nem megfelelő a konverzióhoz" -#: stock/serializers.py:972 +#: stock/serializers.py:986 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:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Készlet tétel státusz kódja" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 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:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Nincs készlet tétel kiválasztva" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Alhelyek" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Felsőbb szintű készlet hely" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Az alkatrésznek értékesíthetőnek kell lennie" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "A tétel egy vevő rendeléshez foglalt" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "A tétel egy gyártási utasításhoz foglalt" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Vevő akihez rendeljük a készlet tételeket" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "A kiválasztott cég nem egy vevő" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Készlet hozzárendelés megjegyzései" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "A készlet tételek listáját meg kell adni" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Készlet összevonás megjegyzései" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Nem egyező beszállítók megengedése" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 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:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Nem egyező állapotok megjelenítése" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 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:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Legalább két készlet tételt meg kell adni" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Nincs változás" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Készlet tétel elsődleges kulcs értéke" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "Készlettétel nincs készleten" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "Készlettétel már készleten van" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "Mennyiség nem lehet negatív" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Készlet tranzakció megjegyzései" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "Meglévő készletbe olvasztás" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "Visszaérkezett tételek beolvasztása a készlettételekbe ha lehetséges" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "Következő sorozatszám" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "Előző Sorozatszám" @@ -9542,83 +9603,99 @@ msgstr "Vevői rendelések" msgid "Return Orders" msgstr "Visszavételek" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Felhasználónév" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Keresztnév" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "A felhasználó keresztneve" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Vezetéknév" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "A felhasználó vezetékneve" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "A felhasználó e-mail címe" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Személyzet" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Van-e a felhasználónak személyzeti jogosultsága" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Rendszergazda" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "A felhasználó rendszergazda-e" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Aktív a felhasználói fiók" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Csak rendszergazda szerkesztheti ezt a mezőt" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "Jelszó" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Felhasználó jelszava" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "Figyelmezetés felülbírálása" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "A jelszó szabályok figyelmeztetésének felülbírálata" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "Nincs jogosultsága felhasználót létrehozni" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "A fiókod sikeresen létrejött." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Kérlek használd a jelszó visszállítás funkciót a belépéshez" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Üdvözlet az InvenTree-ben" diff --git a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po index 29260f9002..897c2dbf2d 100644 --- a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -49,7 +49,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Pengguna tidak memiliki izin untuk melihat model ini" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Jumlah yang diberikan tidak valid" @@ -104,13 +104,13 @@ msgstr "Masukkan tanggal" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Catatan" @@ -123,75 +123,91 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "Nilai yang diberikan tidak sesuai dengan pola yang ditentukan: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Nomor seri kosong" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Gandakan Nomor Seri" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Tidak ada nomor seri ditemukan" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Hapus tag-tag HTML dari nilai ini" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Koneksi Galat" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Ukuran gambar terlalu besar" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "URL yang diberikan bukan file gambar yang valid" @@ -199,7 +215,7 @@ msgstr "URL yang diberikan bukan file gambar yang valid" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Surel" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Pilihan tidak valid" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nama" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Keterangan" msgid "Description (optional)" msgstr "Keterangan (opsional)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Direktori" @@ -320,51 +336,51 @@ msgstr "Sebuah kesalahan telah dicatat oleh server." msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Harus berupa angka yang valid" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Mata Uang" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Nilai tidak valid" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL file gambar external" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Unduhan gambar dari URL external tidak aktif" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "" msgid "Not a valid currency code" msgstr "Bukan kode mata uang yang valid" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "" @@ -545,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "Produksi Induk" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Bagian" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -653,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Pesanan harus dibatalkan sebelum dapat dihapus" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -671,32 +687,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Tersedia" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -704,26 +720,26 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Order Produksi" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Lokasi" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "Referensi Order Produksi" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Referensi Order Penjualan" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Lokasi Sumber" @@ -845,16 +861,16 @@ msgstr "Status pembuatan" msgid "Build status code" msgstr "Kode status pembuatan" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Kode Kelompok" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Kode kelompok untuk hasil produksi ini" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Tanggal Pembuatan" @@ -875,7 +891,7 @@ msgstr "Target tanggal selesai" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Target tanggal selesai produksi. Produksi akan menjadi terlambat setelah tanggal ini." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Tanggal selesai" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" @@ -948,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -964,23 +980,23 @@ msgstr "Hasil produksi sudah selesai" msgid "Build output does not match Build Order" msgstr "Hasil produksi tidak sesuai dengan order produksi" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Jumlah harus lebih besar daripada nol" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1001,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "Jumlah harus 1 untuk stok dengan nomor seri" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "Item stok teralokasikan terlalu banyak" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Stok Item" @@ -1083,378 +1099,378 @@ msgstr "Tujuan stok item" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Hasil Produksi" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Hasil produksi tidak sesuai dengan produksi induk" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Hasil bagian tidak sesuai dengan bagian dalam order produksi" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Hasil produksi ini sudah diselesaikan" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Hasil produksi tidak dialokasikan sepenuhnya" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Masukkan jumlah hasil pesanan" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Jumlah bagian yang dapat dilacak harus berupa angka bulat" -#: build/serializers.py:337 +#: build/serializers.py:344 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:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Nomor Seri" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Masukkan nomor seri untuk hasil pesanan" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Alokasikan nomor seri secara otomatis" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Alokasikan item yang diperlukan dengan nomor seri yang sesuai secara otomatis" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Nomor-nomor seri berikut sudah ada atau tidak valid" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Daftar hasil pesanan harus disediakan" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Lokasi hasil pesanan yang selesai" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Terima Alokasi Tidak Lengkap" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Tidak diizinkan" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Terima Tidak Teralokasikan" -#: build/serializers.py:775 +#: build/serializers.py:782 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:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Stok yang diperlukan belum teralokasikan sepenuhnya" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Terima Tidak Selesai" -#: build/serializers.py:793 +#: build/serializers.py:800 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:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Jumlah produksi yang diperlukan masih belum cukup" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Order memiliki hasil produksi yang belum dilengkapi" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Hasil produksi" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Hasil pesanan harus mengarah ke pesanan yang sama" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 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:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Item harus tersedia dalam stok" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Jumlah tersedia ({q}) terlampaui" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Hasil produksi harus ditentukan untuk mengalokasikan bagian yang terlacak" -#: build/serializers.py:999 +#: build/serializers.py:1006 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:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Item yang dialokasikan harus disediakan" -#: build/serializers.py:1087 +#: build/serializers.py:1094 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:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Lokasi tidak termasuk" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Jangan ambil stok item dari lokasi yang dipilih" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Stok bergantian" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Item stok di beberapa lokasi dapat digunakan secara bergantian" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Stok pengganti" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Izinkan alokasi bagian pengganti" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Item tagihan material" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "Dibatalkan" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1534,11 +1550,11 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "" @@ -1600,7 +1616,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Pengguna" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Harga" @@ -1633,10 +1649,10 @@ msgstr "" msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktif" @@ -1660,11 +1676,11 @@ msgstr "" msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "" @@ -1714,7 +1730,7 @@ msgstr "Judul" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "" msgid "Summary" msgstr "Kesimpulan" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "" @@ -1797,7 +1813,7 @@ msgstr "File tidak ditemukan" msgid "Missing external link" msgstr "Tautan eksternal tidak ditemukan" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "Ukuran Berkas" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Label" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Terbuat" @@ -1998,334 +2014,334 @@ msgstr "" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "Pilihan" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Aktif" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "Respon" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Nama File" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nama Perusahaan" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "Hari" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponen" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Aktifkan Laporan" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Ukuran Halaman" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "Surel diperlukan" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "Aktifkan Integrasi Antarmuka" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Perusahaan" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "" @@ -4163,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4181,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4210,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4258,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4307,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Tidak diketahui" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4797,27 +4833,27 @@ msgstr "" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Selesai" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4919,413 +4955,421 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Pelanggan" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "" -#: order/models.py:1800 -msgid "Line item reference" +#: order/models.py:1814 +msgid "Line Number" msgstr "" -#: order/models.py:1807 -msgid "Line item notes" +#: order/models.py:1815 +msgid "Line number for this item (optional)" msgstr "" #: order/models.py:1822 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1829 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Harga Jual" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Dikirim" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "Jumlah yang dialokasikan harus lebih dari nol" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5372,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5797,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5818,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5933,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "" @@ -5966,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Harga Minimal" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Harga Maksimal" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Perbarui" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "Letter" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8583,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8696,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Nama Pengguna" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Nama Depan" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Nama depan dari pengguna" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Nama Belakang" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Nama belakang dari pengguna" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Alamat surel dari pengguna" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Staf" - -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:240 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" + +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Selamat Datang di InvenTree" diff --git a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po index 179cb9a537..1cf05f6e5c 100644 --- a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -49,7 +49,7 @@ msgstr "Nessun dato fornito" msgid "This field must be unique." msgstr "Questo campo deve essere unico." -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "L'utente non ha i permessi per vedere questo modello" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Impossibile convertire {original} in {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Quantità inserita non valida" @@ -104,13 +104,13 @@ msgstr "Inserisci la data" msgid "Invalid decimal value" msgstr "Valore decimale non valido" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Note" @@ -123,75 +123,91 @@ msgstr "Il valore '{name}' non è nel formato del pattern" msgid "Provided value does not match required pattern: " msgstr "Il valore fornito non corrisponde al modello richiesto: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Impossibile serializzare più di 1000 elementi contemporaneamente" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Numero seriale vuoto" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Seriale Duplicato" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Gruppo non valido: {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "L'intervallo di gruppo {group} supera la quantità consentita ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Nessun numero di serie trovato" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Il numero dei numeri seriali univoci ({n}) deve essere uguale alla quantità ({q})" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Rimuovi i tag HTML da questo valore" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "I dati contengono un contenuto in markdown proibito" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Errore di connessione" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Il server ha risposto con un codice di stato non valido" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Si è verificata un'eccezione" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Il server ha risposto con valore Content-Length non valido" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Immagine troppo grande" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Il download dell'immagine ha superato la dimensione massima" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Il server remoto ha restituito una risposta vuota" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "L'URL fornito non è un file immagine valido" @@ -199,7 +215,7 @@ msgstr "L'URL fornito non è un file immagine valido" msgid "Log in to the app" msgstr "Accedi all'app" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Email" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Scelta non valida" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nome" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Descrizione" msgid "Description (optional)" msgstr "Descrizione (opzionale)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Percorso" @@ -320,51 +336,51 @@ msgstr "Un errore è stato loggato dal server." msgid "Image" msgstr "Immagine" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Deve essere un numero valido" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Selezionare la valuta dalle opzioni disponibili" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Questo campo non può essere nullo." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Valore non valido" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Immagine Remota" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL del file immagine remota" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Il download delle immagini da URL remoto non è abilitato" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Impossibile scaricare l'immagine dall'URL remoto" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "Formato tipo di contenuto non valido" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "Tipo di Contenuto non trovato" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "Il tipo di contenuto non corrisponde alla classe mixin richiesta" @@ -520,11 +536,11 @@ msgstr "Cinese (Semplificato)" msgid "Chinese (Traditional)" msgstr "Cinese (Tradizionale)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Aggiornamento disponibile" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "È disponibile un aggiornamento per InvenTree" @@ -536,7 +552,7 @@ msgstr "Unità fisica non valida" msgid "Not a valid currency code" msgstr "Non è un codice valuta valido" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Stato dell'ordine" @@ -545,21 +561,21 @@ msgstr "Stato dell'ordine" msgid "Parent Build" msgstr "Produzione Genitore" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Includi Varianti" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "Includi Varianti" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "Includi Varianti" msgid "Part" msgstr "Articolo" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoria" @@ -653,16 +669,16 @@ msgstr "Escludi Albero" msgid "Build must be cancelled before it can be deleted" msgstr "La produzione deve essere annullata prima di poter essere eliminata" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Consumabile" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Opzionale" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Assemblaggio" @@ -671,32 +687,32 @@ msgstr "Assemblaggio" msgid "Tracked" msgstr "Monitorato" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testabile" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Ordine In Corso" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Allocato" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Utilizzato" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponibile" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Ordinato" @@ -704,26 +720,26 @@ msgstr "Ordinato" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Ordine di Produzione" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Posizione" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Output" @@ -767,8 +783,8 @@ msgstr "La data di scadenza deve essere successiva alla data d'inizio" msgid "Build Order Reference" msgstr "Riferimento Ordine Di Produzione" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Numero di riferimento ordine di vendita" msgid "Sales Order to which this build is allocated" msgstr "Ordine di vendita a cui questa produzione viene assegnata" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Posizione Di Origine" @@ -845,16 +861,16 @@ msgstr "Stato Produzione" msgid "Build status code" msgstr "Codice stato di produzione" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Codice Lotto" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Codice del lotto per questa produzione" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Data di creazione" @@ -875,7 +891,7 @@ msgstr "Data completamento obiettivo" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Data di completamento della produzione. Dopo tale data la produzione sarà in ritardo." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Data di completamento" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Priorità di questo ordine di produzione" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Codice del progetto" @@ -948,7 +964,7 @@ msgstr "L'ordine di produzione {build} è stato completato" msgid "A build order has been completed" msgstr "L'ordine di produzione è stato completato" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Deve essere fornita un numero di serie per gli articoli rintracciabili" @@ -964,23 +980,23 @@ msgstr "La produzione è stata completata" msgid "Build output does not match Build Order" msgstr "L'output della produzione non corrisponde all'ordine di compilazione" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "La quantità deve essere maggiore di zero" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "La quantità non può essere maggiore della quantità in uscita" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "La produzione non ha superati tutti i test richiesti" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "L'output della build {serial} non ha superato tutti i test richiesti" @@ -1001,10 +1017,10 @@ msgstr "Elemento di Riga Ordine di Produzione" msgid "Build object" msgstr "Crea oggetto" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Crea oggetto" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "La quantità deve essere 1 per lo stock serializzato" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "La quantità assegnata ({q}) non deve essere maggiore della quantità disponibile ({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "L'articolo in giacenza è sovrallocato" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Articoli in magazzino" @@ -1083,378 +1099,378 @@ msgstr "Destinazione articolo in giacenza" msgid "Build Level" msgstr "Livello Produzione" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Nome Articolo" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Genera Output" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "L'output generato non corrisponde alla produzione principale" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "L'output non corrisponde alle parti dell'ordine di produzione" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Questa produzione è stata già completata" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Questo output non è stato completamente assegnato" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Inserisci la quantità per l'output di compilazione" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Quantità totale richiesta per articoli rintracciabili" -#: build/serializers.py:337 +#: build/serializers.py:344 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:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Codice Seriale" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Inserisci i numeri di serie per gli output di compilazione (build option)" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Posizione dello stock per l'output della produzione" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Numeri di Serie Assegnazione automatica" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Assegna automaticamente gli articoli richiesti con i numeri di serie corrispondenti" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "I seguenti numeri di serie sono già esistenti o non sono validi" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Deve essere fornito un elenco dei risultati di produzione" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Posizione dello stock per l'output di produzione rimosso" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Scarta Assegnazioni" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Scartare tutte le assegnazioni di magazzino per gli output rimossi" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Motivo dell'eliminazione degli output di compilazione" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Posizione per gli output di build completati" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Accetta Assegnazione Incompleta" -#: build/serializers.py:565 +#: build/serializers.py:572 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:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Consuma Giacenze Allocate" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Consuma tutte le scorte che sono già state assegnate a questa produzione" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Rimuovi Output Incompleti" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Elimina gli output di produzione che non sono stati completati" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Non permesso" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Accetta come consumato da questo ordine di produzione" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Non assegnare prima di aver completato questo ordine di produzione" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Giacenza in eccesso assegnata" -#: build/serializers.py:757 +#: build/serializers.py:764 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:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Alcuni articoli di magazzino sono stati assegnati in eccedenza" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Accetta Non Assegnato" -#: build/serializers.py:775 +#: build/serializers.py:782 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:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "La giacenza richiesta non è stata completamente assegnata" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Accetta Incompleta" -#: build/serializers.py:793 +#: build/serializers.py:800 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:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "La quantità di produzione richiesta non è stata completata" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "L'ordine di costruzione ha ancora degli ordini di costruzione figli" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "L'ordine di costruzione deve essere in stato di produzione" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "L'ordine di produzione ha output incompleti" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Linea di produzione" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Genera Output" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "L'output di produzione deve puntare alla stessa produzione" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Articolo linea di produzione" -#: build/serializers.py:926 +#: build/serializers.py:933 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:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "L'articolo deve essere disponibile" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantità disponibile ({q}) superata" -#: build/serializers.py:991 +#: build/serializers.py:998 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:999 +#: build/serializers.py:1006 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:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Deve essere indicata l'allocazione dell'articolo" -#: build/serializers.py:1087 +#: build/serializers.py:1094 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:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Escludi Ubicazione" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Escludi gli elementi stock da questa ubicazione selezionata" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Scorte Intercambiabili" -#: build/serializers.py:1103 +#: build/serializers.py:1110 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:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Sostituisci Giacenze" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Consenti l'allocazione delle parti sostitutive" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Articoli Opzionali" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Assegna gli elementi opzionali della distinta base all'ordine di produzione" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Riferimento BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "Identificativo dell'Articolo BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Nome Articolo BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Costruzione" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Articolo Fornitore" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Quantità assegnata" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Riferimento Ordine Di Costruzione" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Nome Categoria Articolo" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Tracciabile" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Ereditato" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Consenti Le Varianti" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Distinta base (Bom)" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "In Produzione" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Pianificato per la produzione" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Scorte esterne" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Disponibilità in magazzino" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Disponibili scorte alternative" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Disponibili varianti delle scorte" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "La quantità consumata supera la quantità assegnata" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "Note facoltative per il consumo di magazzino" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "L'articolo prodotto deve puntare all'ordine di produzione corretto" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "Duplica l'allocazione degli articoli da produrre" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "La riga di produzione deve puntare all'ordine di produzione corretto" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "Duplica l'allocazione della riga di produzione" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "Deve essere fornita almeno un articolo o riga" @@ -1478,7 +1494,7 @@ msgstr "In Attesa" msgid "Cancelled" msgstr "Annullato" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "Ordine di produzione in ritardo" msgid "Build order {bo} is now overdue" msgstr "L'ordine di produzione {bo} è in ritardo" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "È Un Connegamento" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "E' un file" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "L'utente non ha il permesso di eliminare questi allegati" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "L'utente non ha il permesso di eliminare questo allegato" @@ -1534,11 +1550,11 @@ msgstr "Nessun codice valuta valido fornito" msgid "No plugin" msgstr "Nessun plugin" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Etichetta Codice Progetto" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Aggiornato" @@ -1600,7 +1616,7 @@ msgstr "La stringa chiave deve essere univoca" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Utente" msgid "Price break quantity" msgstr "Quantità prezzo limite" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Prezzo" @@ -1633,10 +1649,10 @@ msgstr "Scadenza in cui questa notifica viene ricevuta" msgid "Name for this webhook" msgstr "Nome per questa notifica" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Attivo" @@ -1660,11 +1676,11 @@ msgstr "Segreto" msgid "Shared secret for HMAC" msgstr "Segreto condiviso per HMAC" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "ID Messaggio" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "Identificatore unico per questo messaggio" @@ -1714,7 +1730,7 @@ msgstr "Titolo" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Autore" msgid "Summary" msgstr "Riepilogo" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Letto" @@ -1797,7 +1813,7 @@ msgstr "File mancante" msgid "Missing external link" msgstr "Link esterno mancante" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "Tipo modello" @@ -1833,7 +1849,7 @@ msgstr "Dimensione file" msgid "File size in bytes" msgstr "Dimensioni file in byte" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Tipo di modello specificato per l'allegato non valido" @@ -1861,7 +1877,7 @@ msgstr "Chiave Logica" msgid "State logical key that is equal to this custom state in business logic" msgstr "Chiave logica dello stato che è uguale a questo stato personalizzato nella logica commerciale" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Valore" @@ -1874,7 +1890,7 @@ msgstr "Valore numerico che verrà salvato nel database dei modelli" msgid "Name of the state" msgstr "Nome dello Stato" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Etichetta" @@ -1930,7 +1946,7 @@ msgstr "La chiave logica deve essere nelle chiavi logiche dello stato di riferim msgid "Name must be different from the names of the reference status" msgstr "Il nome deve essere diverso dai nomi dello stato di riferimento" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "Elenco Selezioni" @@ -1982,7 +1998,7 @@ msgstr "Voce Predefinita" msgid "Default entry for this selection list" msgstr "Voce predefinita per questo elenco di selezione" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Creato" @@ -1998,334 +2014,334 @@ msgstr "Ultimo aggiornamento" msgid "Date and time that the selection list was last updated" msgstr "Data e ora in cui l'elenco di selezione è stato aggiornato" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "Voce Lista Selezione" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "Voci Lista Selezione" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "Elenco di selezione a cui appartiene questa voce" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "Valore della voce della lista di selezione" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "Etichetta per la voce elenco di selezione" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "Descrizione della voce della lista di selezione" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "Questa voce della lista di selezione è attiva?" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "Modello Parametro" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "Modelli parametro" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "I parametri della casella di controllo non possono avere unità" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "I parametri della casella di controllo non possono avere scelte" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "Le scelte devono essere uniche" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "Il nome del modello del parametro deve essere univoco" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "Tipo di modello di destinazione per questo modello di parametro" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "Nome Parametro" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "Unità" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "Unità fisiche per questo parametro" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "Descrizione del parametro" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "Casella di spunta" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "Questo parametro è una casella di spunta?" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "Scelte" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "Scelte valide per questo parametro (separato da virgola)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "Lista di selezione per questo parametro" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Abilitato" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "Questo modello di parametro è abilitato?" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "Parametro" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "Parametri" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "Scelta non valida per il valore del parametro" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Tipo di modello specificato per parametro non valido" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "ID Modello" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "ID del modello di destinazione per questo parametro" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Modello" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "Modello Parametro" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Dati" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "Valore del Parametro" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Nota" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Note opzionali elemento" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "Scansione Codice A Barre" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "Dati del Codice a Barre" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "Utente che ha scannerizzato il codice a barre" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "Data e ora" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "Data e ora della scansione del codice a barre" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "Endpoint URL che ha elaborato il codice a barre" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "Contesto" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "Dati contestuali per la scansione del codice a barre" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "Risposta" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "Dati di risposta dalla scansione del codice a barre" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Risultato" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "La scansione del codice a barre è riuscita?" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "Si è verificato un errore" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: La cancellazione del log email è protetta. Imposta INVENTREE_PROTECT_EMAIL_LOG a Falso per consentire la cancellazione." -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "Messaggio email" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "Messaggi email" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "Annunciato" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "Inviato" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "Fallito" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "Consegnato" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "Confermato" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "Ricevuti" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "In uscita" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "Nessuna risposta" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "Traccia La Consegna" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "Conferma di lettura" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "Tracciare i clic delle email" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "ID Globale" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identificatore per questo messaggio (potrebbe essere fornito da un sistema esterno)" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "ID discussione" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identificatore per questo thread del messaggio (potrebbe essere fornito da un sistema esterno)" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "Discussione" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "Thread collegato a questo messaggio" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "Priorità" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "Discussione Email" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "Discussioni Email" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Chiave" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "Chiave univoca per questa discussione (usata per identificare la discussione)" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "Identificatore univoco per questa discussione" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "Avviato internamente" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "Questa discussione è iniziata internamente?" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "Data e ora in cui la discussione è stata creata" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "Data e ora in cui la discussione è stata aggiornata" @@ -2375,1243 +2391,1259 @@ msgstr "Indica se l'impostazione è sovrascritta da una variabile ambiente" msgid "Override" msgstr "Sovrascrivi" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "In Esecuzione" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Attività in sospeso" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Attività pianificate" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Attività Fallite" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "ID Attività" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "ID attività univoco" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Blocco" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Tempo di blocco" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Nome attività" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funzione" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Nome della funzione" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argomenti" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Argomenti attività" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Argomenti Parole Chiave" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Argomenti parole chiave attività" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Nome del file" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Tipo di modello" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "L'utente non ha il permesso di creare o modificare allegati per questo modello" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "L'utente non ha il permesso di creare o modificare parametri per questo modello" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Lista di selezione bloccata" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Nessun gruppo" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "L'URL del sito è bloccato dalla configurazione" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Riavvio richiesto" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "È stata modificata un'impostazione che richiede un riavvio del server" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Migrazioni in sospeso" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Numero di migrazioni del database in sospeso" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Codici di avviso attivi" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "Un dizionario di codici di avviso attivi" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "ID istanza" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Identificatore unico per questa istanza InvenTree" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "Annuncio ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Annuncia l'ID dell'istanza del server nelle informazioni sullo stato del server (non autenticato)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Nome Istanza Del Server" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Descrittore stringa per l'istanza del server" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Utilizza nome istanza" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Usa il nome dell'istanza nella barra del titolo" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Limita visualizzazione `Informazioni`" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Mostra la modalità `Informazioni` solo ai superusers" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nome azienda" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "Nome interno dell'azienda" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "URL Base" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "URL di base per l'istanza del server" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Valuta predefinita" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "Selezionare la valuta di base per i calcoli dei prezzi" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "Valute Supportate" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "Elenco dei codici valuta supportati" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "Intervallo Aggiornamento Valuta" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Quanto spesso aggiornare i tassi di cambio (impostare a zero per disabilitare)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "giorni" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "Plugin di aggiornamento della valuta" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "Plugin di aggiornamento valuta da usare" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "Scarica dall'URL" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "Consenti il download di immagini e file remoti da URL esterno" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "Limite Dimensione Download" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "Dimensione massima consentita per il download dell'immagine remota" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "User-agent utilizzato per scaricare dall'URL" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Consenti di sovrascrivere l'user-agent utilizzato per scaricare immagini e file da URL esterno (lasciare vuoto per il predefinito)" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "Convalida URL rigoroso" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "Richiede specifico schema quando si convalidano gli URL" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "Aggiorna intervallo di controllo" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "Quanto spesso controllare gli aggiornamenti (impostare a zero per disabilitare)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Backup automatico" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "Abilita il backup automatico di database e file multimediali" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "Intervallo Di Backup Automatico" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "Definisci i giorni intercorrenti tra un backup automatico e l'altro" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "Intervallo Eliminazione Attività" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "I risultati delle attività in background verranno eliminati dopo un determinato numero di giorni" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "Intervallo Di Cancellazione Registro Errori" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "I log di errore verranno eliminati dopo il numero specificato di giorni" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "Intervallo Di Cancellazione Notifica" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "Le notifiche dell'utente verranno eliminate dopo il numero di giorni specificato" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "Intervallo Eliminazione Email" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "I messaggi e-mail verranno eliminati dopo il numero specificato di giorni" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "Proteggi Log Email" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "Impedisci l'eliminazione delle voci di log email" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Supporto Codice A Barre" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "Abilita il supporto per lo scanner di codice a barre nell'interfaccia web" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "Memorizza Risultati Barcode" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "Memorizza i risultati della scansione del codice a barre nel database" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "Numero Massimo Scansioni Barcode" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "Numero massimo di risultati della scansione del codice a barre da memorizzare" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "Codice a barre inserito scaduto" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "Tempo di ritardo di elaborazione codice a barre" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "Codice a Barre Supporto Webcam" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "Consenti la scansione del codice a barre tramite webcam nel browser" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "Visualizza dati codice a barre" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "Visualizza i dati del codice a barre nel browser come testo" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "Plugin Generazione Codice A Barre" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "Plugin da usare per la generazione interna di codice a barre" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "Revisioni Articolo" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "Abilita il campo revisione per l'articolo" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "Solo revisione assemblaggio" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "Consenti revisioni solo per articoli di assemblaggio" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "Consenti l'eliminazione dall'assemblaggio" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "Permetti l'eliminazione degli articoli che sono usati in un assemblaggio" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "Schema di espressione regolare per l'articolo corrispondente IPN" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "Consenti duplicati IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "Permetti a più articoli di condividere lo stesso IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "Permetti modifiche al part number interno (IPN)" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "Consenti di modificare il valore del part number durante la modifica di un articolo" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "Copia I Dati Della distinta base dell'articolo" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "Copia i dati della Distinta Base predefinita quando duplichi un articolo" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "Copia I Dati Parametro dell'articolo" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "Copia i dati dei parametri di default quando si duplica un articolo" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "Copia I Dati dell'Articolo Test" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "Copia i dati di prova di default quando si duplica un articolo" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "Copia Template Parametri Categoria" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "Copia i modelli dei parametri categoria quando si crea un articolo" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "Gli articoli sono modelli per impostazione predefinita" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "Gli articoli possono essere assemblate da altri componenti per impostazione predefinita" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Componente" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "Gli articoli possono essere assemblati da altri componenti per impostazione predefinita" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Acquistabile" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Vendibile" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "Gli articoli sono tracciabili per impostazione predefinita" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Virtuale" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "Gli articoli sono virtuali per impostazione predefinita" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "Mostra articoli correlati" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "Visualizza parti correlate per ogni articolo" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "Dati iniziali dello stock" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "Consentire la creazione di uno stock iniziale quando si aggiunge una nuova parte" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "Dati iniziali del fornitore" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Consentire la creazione dei dati iniziali del fornitore quando si aggiunge una nuova parte" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "Formato di visualizzazione del nome articolo" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "Formato per visualizzare il nome dell'articolo" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "Icona predefinita Categoria Articolo" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "Icona predefinita Categoria Articolo (vuoto significa nessuna icona)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "Prezzi Minimi Decimali" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Numero minimo di decimali da visualizzare quando si visualizzano i dati dei prezzi" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "Prezzi Massimi Decimali" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Numero massimo di decimali da visualizzare quando si visualizzano i dati dei prezzi" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "Usa Prezzi Fornitore" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Includere le discontinuità di prezzo del fornitore nei calcoli generali dei prezzi" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "Ignora la Cronologia Acquisti" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Cronologia dei prezzi dell'ordine di acquisto del fornitore superati con discontinuità di prezzo" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "Utilizzare i prezzi degli articoli in stock" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Utilizzare i prezzi dei dati di magazzino inseriti manualmente per il calcolo dei prezzi" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "Età dei prezzi degli articoli in stock" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Escludere dal calcolo dei prezzi gli articoli in giacenza più vecchi di questo numero di giorni" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "Utilizza Variazione di Prezzo" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "Includi la variante dei prezzi nei calcoli dei prezzi complessivi" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "Solo Varianti Attive" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "Utilizza solo articoli di varianti attive per calcolare i prezzi delle varianti" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "Aggiornamento Automatico Prezzi" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "Aggiorna automaticamente il prezzo degli articoli quando i dati interni cambiano" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "Intervallo Di Ricostruzione Dei Prezzi" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "Numero di giorni prima che il prezzo dell'articolo venga aggiornato automaticamente" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Prezzi interni" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "Abilita prezzi interni per gli articoli" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "Sovrascrivi Prezzo Interno" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "Se disponibile, i prezzi interni sostituiscono i calcoli della fascia di prezzo" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "Abilita stampa etichette" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "Abilita la stampa di etichette dall'interfaccia web" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "Etichetta Immagine DPI" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Risoluzione DPI quando si generano file di immagine da fornire ai plugin di stampa per etichette" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Abilita Report di Stampa" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "Abilita generazione di report di stampa" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "Modalità Debug" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "Genera report in modalità debug (output HTML)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "Registro errori" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "Errori di log che si verificano durante la generazione dei report" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Dimensioni pagina" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "Dimensione predefinita della pagina per i report PDF" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "Forza Unità Parametro" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "Se le unità sono fornite, i valori dei parametri devono corrispondere alle unità specificate" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "Seriali Unici Globali" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "I numeri di serie per gli articoli di magazzino devono essere univoci" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "Elimina scorte esaurite" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "Determina il comportamento predefinito quando un articolo a magazzino è esaurito" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "Modello Codice a Barre" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "Modello per la generazione di codici batch predefiniti per gli elementi stock" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "Scadenza giacenza" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "Abilita funzionalità di scadenza della giacenza" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "Vendi giacenza scaduta" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "Consenti la vendita di stock scaduti" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "Tempo di Scorta del Magazzino" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "Numero di giorni in cui gli articoli in magazzino sono considerati obsoleti prima della scadenza" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "Crea giacenza scaduta" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "Permetti produzione con stock scaduto" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "Controllo della proprietà della giacenza" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "Abilita il controllo della proprietà sulle posizioni e gli oggetti in giacenza" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "Icona Predefinita Ubicazione di Magazzino" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "Icona Predefinita Ubicazione di Magazzino (vuoto significa nessuna icona)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "Mostra articoli a magazzino installati" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "Visualizza gli articoli a magazzino installati nelle tabelle magazzino" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "Verificare la distinta base durante l'installazione degli articoli" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Gli articoli di magazzino installati devono esistere nella distinta base per l'articolo principale" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "Consenti trasferimento magazzino esaurito" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Consenti il trasferimento di articoli non disponibili a magazzino tra le diverse ubicazioni di magazzino" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "Modello Di Riferimento Ordine Di Produzione" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di produzione" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "È richiesto il Proprietario Responsabile" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "A ogni ordine deve essere assegnato un proprietario responsabile" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "Richiede Articolo Attivo" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "Impedisci la creazione di ordini di produzione per gli articolo inattivi" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "Richiede Articolo Bloccato" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "Impedisci la creazione di ordini di costruzione per le parti sbloccate" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "Richiede un BOM valido" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "Previene la creazione di ordini di costruzione a meno che BOM non sia stato convalidato" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "Richiedi Ordini Dei Figli Chiusi" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "Impedisci il completamento dell'ordine di costruzione fino alla chiusura di tutti gli ordini figli" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "Ordini di Produzione Esterni" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "Abilita funzionalità ordini di produzione esterni" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Blocca Fino Al Passaggio Dei Test" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Impedisci che gli output di costruzione siano completati fino al superamento di tutti i test richiesti" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "Abilita Ordini Di Reso" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "Abilita la funzionalità ordine di reso nell'interfaccia utente" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "Motivo di Riferimento per ordine di reso" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di reso" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "Modifica Ordini Di Reso Completati" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "Consenti la modifica degli ordini di reso dopo che sono stati completati" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "Modello Di Riferimento Ordine Di Vendita" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di vendita" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "Spedizione Predefinita Ordine Di Vendita" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "Abilita la creazione di spedizioni predefinite con ordini di vendita" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "Modifica Ordini Di Vendita Completati" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Consenti la modifica degli ordini di vendita dopo che sono stati spediti o completati" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "La Spedizione Richiede Controllo" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "Impedire il completamento delle spedizioni fino a quando gli articoli sono stati controllati" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "Segna gli ordini spediti come completati" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Gli ordini di vendita contrassegnati come spediti saranno automaticamente completati, bypassando lo stato \"spedito\"" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "Modello di Riferimento Ordine D'Acquisto" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di acquisto" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "Modifica Ordini Di Acquisto Completati" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Consenti la modifica degli ordini di acquisto dopo che sono stati spediti o completati" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "Converti Valuta" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "Converti il valore dell'elemento in valuta base quando si riceve lo stock" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "Completa Automaticamente Gli Ordini D'Acquisto" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Contrassegna automaticamente gli ordini di acquisto come completi quando tutti gli elementi della riga sono ricevuti" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Abilita password dimenticata" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "Abilita la funzione password dimenticata nelle pagine di accesso" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Abilita registrazione" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "Abilita auto-registrazione per gli utenti nelle pagine di accesso" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "SSO abilitato" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "Abilita SSO nelle pagine di accesso" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "Abilita registrazione SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Abilita l'auto-registrazione tramite SSO per gli utenti nelle pagine di accesso" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "Abilita sincronizzazione dei gruppi SSO" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Abilita la sincronizzazione dei gruppi InvenTree con i gruppi forniti dall'IdP" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "Chiave gruppo SSO" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Il nome dell'attributo di richiesta di gruppi fornito dall'IdP" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "Mappa del gruppo SSO" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Una mappatura dai gruppi SSO ai gruppi InvenTree locali. Se il gruppo locale non esiste, verrà creato." -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "Rimuovere i gruppi al di fuori dell'SSO" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Indica se i gruppi assegnati all'utente debbano essere rimossi se non sono backend dall'IdP. La disattivazione di questa impostazione potrebbe causare problemi di sicurezza" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "Email richiesta" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "Richiedi all'utente di fornire una email al momento dell'iscrizione" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "Riempimento automatico degli utenti SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "Compila automaticamente i dettagli dell'utente dai dati dell'account SSO" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "Posta due volte" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "Al momento della registrazione chiedere due volte all'utente l'indirizzo di posta elettronica" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Password due volte" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "Al momento della registrazione chiedere agli utenti due volte l'inserimento della password" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "Domini consentiti" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Limita la registrazione a determinati domini (separati da virgola, a partire da @)" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "Gruppo iscrizione" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Gruppo a cui i nuovi utenti sono assegnati alla registrazione. Se la sincronizzazione di gruppo SSO è abilitata, questo gruppo è impostato solo se nessun gruppo può essere assegnato dall'IdP." -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "Applica MFA" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "Gli utenti devono utilizzare la sicurezza a due fattori." -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "Abilitare questa impostazione richiederà a tutti gli utenti di impostare l'autenticazione multi fattore. Tutte le sessioni saranno disconnesse immediatamente." -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "Controlla i plugin all'avvio" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Controlla che tutti i plugin siano installati all'avvio - abilita in ambienti contenitore" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "Controlla gli aggiornamenti dei plugin" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "Abilita controlli periodici per gli aggiornamenti dei plugin installati" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "Abilita l'integrazione URL" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "Attiva plugin per aggiungere percorsi URL" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "Attiva integrazione navigazione" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "Abilita i plugin per l'integrazione nella navigazione" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "Abilita l'app integrata" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "Abilita plugin per aggiungere applicazioni" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "Abilita integrazione pianificazione" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "Abilita i plugin per eseguire le attività pianificate" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "Abilita eventi integrati" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "Abilita plugin per rispondere agli eventi interni" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "Abilita integrazione interfaccia" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "Abilita i plugin per l'integrazione nell'interfaccia utente" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "Abilita integrazione email" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Abilita i plugin per elaborare le email in uscita/in arrivo" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "Abilita codici progetto" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "Abilita i codici del progetto per tracciare i progetti" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "Abilita la funzionalità per registrare i livelli storici e il valore del magazzino" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "Escludi Posizioni Esterne" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "Inventario periodico automatico" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "Visualizza i nomi completi degli utenti" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "Mostra nomi completi degli utenti invece che nomi utente" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "Visualizza Profili Utente" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "Visualizza i profili degli utenti sulla pagina del loro profilo" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "Abilita Dati Stazione Di Prova" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "Abilita la raccolta dati della stazione di prova per i risultati del test" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "Abilita Ping Macchina" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Abilita l'attività di ping periodico delle macchine registrate per controllarne lo stato" @@ -3956,33 +3988,33 @@ msgstr "L'articolo è attivo" msgid "Manufacturer is Active" msgstr "Il produttore è attivo" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "L'articolo fornitore è attivo" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "L'articolo interno è attivo" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Il fornitore è attivo" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Produttore" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Azienda" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "Ha Scorte" @@ -4071,7 +4103,7 @@ msgstr "Partita IVA" msgid "Company Tax ID" msgstr "Codice Fiscale Azienda" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Indirizzo" @@ -4163,7 +4195,7 @@ msgstr "Note di spedizione per uso interno" msgid "Link to address information (external)" msgstr "Collegamento alle informazioni sull'indirizzo (esterno)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Codice articolo produttore" @@ -4181,12 +4213,12 @@ msgstr "Seleziona articolo" msgid "Select manufacturer" msgstr "Seleziona Produttore" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "Codice articolo produttore (MPN)" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Codice articolo produttore" @@ -4210,8 +4242,8 @@ msgstr "Le unità del pacchetto devono essere maggiori di zero" msgid "Linked manufacturer part must reference the same base part" msgstr "L'articolo del costruttore collegato deve riferirsi alla stesso articolo" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Fornitore" msgid "Select supplier" msgstr "Seleziona fornitore" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Unità di giacenza magazzino fornitore" @@ -4258,8 +4290,8 @@ msgstr "costo base" msgid "Minimum charge (e.g. stocking fee)" msgstr "Onere minimo (ad esempio tassa di stoccaggio)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Confezionamento" @@ -4307,14 +4339,18 @@ msgstr "Valuta predefinita utilizzata per questo fornitore" msgid "Company Name" msgstr "Nome Azienda" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "In magazzino" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "Sconti a scalare" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Errore durante l'esportazione dei dati" @@ -4419,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "Identificatore del database esistente per il record" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "La colonna è già mappata a un campo del database" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Il campo è già mappato a una colonna di dati" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "La mappatura delle colonne deve essere collegata a una sessione di importazione valida" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "La colonna non esiste nel file dati" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "Il campo non esiste nel modello di destinazione" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Il campo selezionato è di sola lettura" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Sessione d'importazione" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Campo" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Colonna" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Indice riga" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Dati riga originali" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Errori" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Valido" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "L'ID è richiesto per aggiornare i record esistenti." -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "Nessun record trovato con l'ID fornito" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "Formato ID fornito non valido" @@ -4579,7 +4615,7 @@ msgstr "Numero di copie da stampare per ogni etichetta" msgid "Connected" msgstr "Connesso" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Sconosciuto" @@ -4711,7 +4747,7 @@ msgstr "Valore massimo per il tipo di avanzamento, richiesto se tipo = progresso msgid "Order Reference" msgstr "Riferimento ordine" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "In Sospeso" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "Prezzo Articolo" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Completato prima" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Completato dopo" @@ -4779,17 +4815,17 @@ msgstr "Completato dopo" msgid "External Build Order" msgstr "Ordine di Produzione Esterno" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "Ordine" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Ordine completato" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Articolo interno" @@ -4797,27 +4833,27 @@ msgstr "Articolo interno" msgid "Order Pending" msgstr "Ordine in sospeso" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Completato" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Ha Spedizione" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Ordine D'Acquisto" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "Ordine D'Acquisto" msgid "Sales Order" msgstr "Ordini di Vendita" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "L'indirizzo non corrisponde all'azienda selezionata" msgid "Order description (optional)" msgstr "Descrizione dell'ordine (opzionale)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "Seleziona il codice del progetto per questo ordine" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "Collegamento a un sito web esterno" @@ -4886,7 +4922,7 @@ msgstr "Data iniziale" msgid "Scheduled start date for this order" msgstr "Data d'inizio programmata per questo ordine" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data scadenza" @@ -4919,413 +4955,421 @@ msgstr "Punto di contatto per questo ordine" msgid "Company address for this order" msgstr "Indirizzo dell'azienda per questo ordine" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "Riferimento ordine" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Stato" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "Stato ordine d'acquisto" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "Azienda da cui sono stati ordinati gli articoli" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "Riferimento fornitore" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "Codice di riferimento ordine fornitore" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "ricevuto da" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "Data ordine completato" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "Destinazione" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "Destinazione per gli elementi ricevuti" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "Il fornitore dell'articolo deve corrispondere al fornitore dell'ordine di produzione" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "L'elemento di riga non corrisponde all'ordine di acquisto" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "Manca un elemento collegato" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "La quantità deve essere un numero positivo" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "Azienda da cui sono stati ordinati gli elementi" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "Stato ordine di vendita" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "Riferimento Cliente " -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "Codice di riferimento Ordine del Cliente" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "Data di spedizione" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "spedito da" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "L'ordine è già stato completato" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "L'ordine è già stato annullato" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "Solo un ordine aperto può essere contrassegnato come completo" -#: order/models.py:1450 +#: order/models.py:1463 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:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "L'ordine non può essere completato perché ci sono allocazioni incomplete" -#: order/models.py:1464 +#: order/models.py:1477 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:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "L'ordine è bloccato e non può essere modificato" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "Quantità Elementi" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1822 msgid "Line item reference" msgstr "Riferimento Linea Elemento" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "Note linea elemento" -#: order/models.py:1822 +#: order/models.py:1844 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:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "Descrizione della parte (opzionale)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "Contesto aggiuntivo per questa voce" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "Prezzo unitario" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "Riga ordine d'acquisto" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "L'articolo del fornitore deve corrispondere al fornitore" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "L'ordine di produzione deve essere contrassegnato come esterno" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "Gli ordini di costruzione possono essere collegati solo alle parti di assemblaggio" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "L'articolo dell'ordine di produzione deve corrispondere all'articolo della riga" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "Articolo Fornitore" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "Ricevuto" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "Numero di elementi ricevuti" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Prezzo di Acquisto" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "Prezzo di acquisto unitario" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "Ordine di produzione esterno che deve essere eseguito da questo articolo" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "Riga Extra ordine di acquisto" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "Articolo ordine di vendita" -#: order/models.py:2121 +#: order/models.py:2143 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:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Prezzo di Vendita" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "Prezzo unitario di vendita" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Spedito" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "Quantità spedita" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "Spedizione dell'ordine di vendita" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "L'indirizzo di spedizione deve corrispondere al cliente" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "Indirizzo di consegna per questa spedizione" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "Data di spedizione" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "Data di consegna" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "Data di consegna della spedizione" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "Verificato Da" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "Utente che ha controllato questa spedizione" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Spedizione" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "Numero di spedizione" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "Numero di monitoraggio" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "Informazioni di monitoraggio della spedizione" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "Numero Fattura" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "Numero di riferimento per la fattura associata" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "La spedizione è già stata spedita" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "La spedizione non ha articoli di stock assegnati" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "La spedizione deve essere controllata prima che possa essere completata" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "Riga Extra ordine di vendita" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "Assegnazione Ordini Di Vendita" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "L'elemento di magazzino non è stato assegnato" -#: order/models.py:2548 +#: order/models.py:2577 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:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "Impossibile allocare stock a una riga senza un articolo" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La quantità di ripartizione non puo' superare la disponibilità della giacenza" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "La quantità di assegnazione deve essere maggiore di zero" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "La quantità deve essere 1 per l'elemento serializzato" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "L'ordine di vendita non corrisponde alla spedizione" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "La spedizione non corrisponde all'ordine di vendita" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Linea" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "Riferimento della spedizione ordine di vendita" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "Elemento" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "Seleziona elemento stock da allocare" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "Inserisci la quantità assegnata alla giacenza" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "Riferimento ordine di reso" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "Società a cui vengono restituiti gli articoli" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "Stato ordine di reso" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "Articolo Linea Ordine Reso" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "L'elemento stock deve essere specificato" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "Quantità di reso superiore alla quantità di scorta" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "La quantità di reso deve essere maggiore di zero" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "Quantità non valida per l'elemento stock serializzato" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "Seleziona l'elemento da restituire dal cliente" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "Data di ricezione" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "La data in cui questo articolo restituito è stato ricevuto" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "Risultati" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "Risultato per questa voce di riga" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "Costo associato alla restituzione o riparazione per questa voce di linea" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "Riga Extra ordine di reso" @@ -5353,7 +5397,7 @@ msgstr "Copia Linee Extra" msgid "Copy extra line items from the original order" msgstr "Copia gli elementi di riga extra dall'ordine originale" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Copia parametri" @@ -5372,216 +5416,216 @@ msgstr "Elementi Riga" msgid "Completed Lines" msgstr "Righe Completate" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Duplica Ordine" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Specifica le opzioni per duplicare questo ordine" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "ID dell'ordine non corretto" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Nome Fornitore" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "L'ordine non può essere cancellato" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Consenti di chiudere l'ordine con elementi di riga incompleti" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "L'ordine ha elementi di riga incompleti" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "L'ordine non è aperto" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Prezzo Automatico" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Calcola automaticamente il prezzo di acquisto in base ai dati del fornitore articolo" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Valuta prezzo d'acquisto" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Unisci elementi" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Unisce gli elementi con lo stesso articolo, destinazione e data di destinazione in una riga" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Codice articolo" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Numero Dell'articolo Interno" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Numero Articolo Interno" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "L'articolo del fornitore deve essere specificato" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "L'ordine di acquisto deve essere specificato" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Il fornitore deve essere abbinato all'ordine d'acquisto" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "L'ordine di acquisto deve essere abbinato al fornitore" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Elemento Riga" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Seleziona la posizione di destinazione per gli elementi ricevuti" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Inserisci il codice univoco per gli articoli in arrivo" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Data di Scadenza" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Inserisci la data di scadenza per gli articoli in arrivo" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Inserisci i numeri di serie per gli articoli stock in arrivo" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Sovrascrivi le informazioni d'imballaggio per gli articoli in arrivo" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Nota aggiuntiva per gli articoli in arrivo" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Codice a Barre" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Codice a barre scansionato" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Il codice a barre è già in uso" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Gli elementi di linea devono essere forniti" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "La destinazione deve essere specificata" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "I valori dei codici a barre forniti devono essere univoci" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Spedizioni" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Spedizioni Completate" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Valuta prezzo di vendita" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Elementi Assegnati" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Nessun dettaglio di spedizione fornito" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "L'elemento di riga non è associato a questo ordine" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "La quantità deve essere positiva" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Inserisci i numeri di serie da assegnare" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "La spedizione è già stata spedita" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "La spedizione non è associata con questo ordine" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Nessuna corrispondenza trovata per i seguenti numeri di serie" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "I seguenti numeri di serie non sono disponibili" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Articoli Linea Ordine Reso" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "L'elemento di riga non corrisponde all'ordine di reso" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "L'elemento di riga è già stato ricevuto" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Gli elementi possono essere ricevuti solo con ordini in corso" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Quantità da restituire" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Valuta del prezzo" @@ -5797,7 +5841,7 @@ msgstr "Parole chiave predefinite per gli articoli in questa categoria" msgid "Icon" msgstr "Icona" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Icona (facoltativa)" @@ -5818,7 +5862,7 @@ msgstr "Valore Predefinito" msgid "Default Parameter Value" msgstr "Valore Parametro Predefinito" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Articoli" @@ -5933,7 +5977,7 @@ msgstr "Parole chiave per migliorare la visibilità nei risultati di ricerca" msgid "Part category" msgstr "Categoria articolo" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN - Numero di riferimento interno" @@ -5942,7 +5986,7 @@ msgstr "IPN - Numero di riferimento interno" msgid "Part revision or version number" msgstr "Numero di revisione o di versione" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Revisione" @@ -5966,7 +6010,7 @@ msgstr "Scadenza Predefinita" msgid "Expiry time (in days) for stock items of this part" msgstr "Scadenza (in giorni) per gli articoli in giacenza di questo pezzo" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Scorta Minima" @@ -6447,355 +6491,355 @@ msgstr "Non si può creare una relazione tra l'articolo e sé stesso" msgid "Duplicate relationship already exists" msgstr "La relazione duplicata esiste già" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Categoria Superiore" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Categoria articolo principale" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Sottocategorie" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Risultati" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Numero di risultati registrati rispetto a questo modello" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Valuta di acquisto di questo articolo in stock" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "Il file non è un immagine" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Articolo Originale" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Seleziona l'articolo originale da duplicare" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Copia immagine" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Copia immagine dall'articolo originale" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Copia Distinta Base" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Copia fattura dei materiali dall'articolo originale" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Copia i dati dei parametri dall'articolo originale" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Copia note" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Copia note dall'articolo originale" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "Copia Test" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "Copia modelli di test dall'articolo originale" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Quantità iniziale" -#: part/serializers.py:448 +#: part/serializers.py:451 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:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Ubicazione Iniziale Magazzino" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Specificare l'ubicazione iniziale del magazzino per questo Articolo" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Seleziona il fornitore (o lascia vuoto per saltare)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleziona il produttore (o lascia vuoto per saltare)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Codice articolo Produttore" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "L'azienda selezionata non è un fornitore valido" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "L'azienda selezionata non è un produttore valido" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "L'articolo del produttore che corrisponde a questo MPN esiste già" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "L'articolo del fornitore che corrisponde a questo SKU esiste già" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Nome Categoria" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "In Costruzione" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "Quantità di questo articolo attualmente in produzione" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Eccezionale quantità di questa parte prevista da costruire" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Articoli in magazzino" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Revisioni" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Giacenze Totali" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Scorte Non Assegnate" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Scorta Variante" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Duplica articolo" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Copia i dati iniziali da un altro Articolo" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Stock iniziale" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Crea Articolo con quantità di scorta iniziale" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Informazioni Fornitore" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Aggiungi le informazioni iniziali del fornitore per questo articolo" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Copia Parametri Categoria" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Copia i parametri dai modelli della categoria articolo selezionata" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Immagine esistente" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Nome del file di un'immagine articolo esistente" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Il file immagine non esiste" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Convalida l'intera Fattura dei Materiali" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Puoi produrre" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "Richiesto per gli Ordini di Produzione" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "Assegnato agli Ordini di Produzione" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "Richiesto per gli Ordini di Vendita" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "Assegnato agli Ordini di Vendita" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Prezzo Minimo" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Sovrascrivi valore calcolato per il prezzo minimo" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Valuta del prezzo minimo" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Prezzo Massimo" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Sovrascrivi valore calcolato per il prezzo massimo" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Valuta del prezzo massimo" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Aggiorna" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Aggiorna i prezzi per questo articolo" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Impossibile convertire dalle valute fornite in {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Il prezzo minimo non può essere maggiore del prezzo massimo" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Il prezzo massimo non può essere minore del prezzo minimo" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Seleziona l'assemblaggio padre" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Seleziona la componente" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Seleziona l'articolo da cui copiare la distinta base" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Rimuovi Dati Esistenti" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Rimuovi elementi distinta base esistenti prima di copiare" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Includi Ereditato" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Includi gli elementi Distinta Base ereditati da prodotti template" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Salta Righe Non Valide" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Abilita questa opzione per saltare le righe non valide" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Copia Articoli sostitutivi" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copia articoli sostitutivi quando duplichi gli elementi distinta base" @@ -7516,7 +7560,7 @@ msgstr "Bordo" msgid "Print a border around each label" msgstr "Stampa un bordo intorno ad ogni etichetta" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "Orizzontale" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "L'installazione dei plugin è disattivata" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Plugin installato con successo" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Plugin installato in {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "Installazione non confermata" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "Nome modello" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "Descrizione del template" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "Allega al Modello su Stampa" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "Salva l'output del report come allegato contro l'istanza del modello collegato durante la stampa" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "Formato del nome file" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Filtri" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Larghezza [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "Larghezza dell'etichetta, specificata in mm" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Altezza [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "Larghezza dell'etichetta, specificata in mm" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "Snippet" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "Report file snippet" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "Descrizione file snippet" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "Risorsa" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "Report file risorsa" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "File risorsa descrizione" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "Test Report Elemento Stock" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Elementi installati" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Obsoleto" @@ -8522,7 +8583,7 @@ msgstr "L'articolo deve essere specificato" msgid "Stock items cannot be located into structural stock locations!" msgstr "Gli articoli di magazzino non possono essere ubicati in posizioni di magazzino strutturali!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Non è possibile creare un elemento di magazzino per articoli virtuali" @@ -8567,7 +8628,7 @@ msgstr "Seleziona un fornitore articolo corrispondente per questo elemento di ma msgid "Where is this stock item located?" msgstr "Dove si trova questo articolo di magazzino?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Imballaggio di questo articolo di magazzino è collocato in" @@ -8583,7 +8644,7 @@ msgstr "Questo elemento è stato installato su un altro elemento?" msgid "Serial number for this item" msgstr "Numero di serie per questo elemento" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Codice lotto per questo elemento di magazzino" @@ -8696,7 +8757,7 @@ msgstr "L'elemento di magazzino è attualmente in produzione" msgid "Serialized stock cannot be merged" msgstr "Il magazzino serializzato non può essere unito" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Duplica elementi di magazzino" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "Elemento principale" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Inserisci i numeri di serie per i nuovi elementi" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Scaduto" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Elementi secondari" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Inserisci il numero di elementi di magazzino da serializzare" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, 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:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Posizione magazzino di destinazione" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Numeri di serie non possono essere assegnati a questo articolo" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Numeri di serie già esistenti" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Seleziona elementi di magazzino da installare" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Aggiungi nota di transazione (opzionale)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Elemento di magazzino non disponibile" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "L'articolo selezionato non è nella Fattura dei Materiali" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Posizione di destinazione per gli elementi disinstallati" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Seleziona l'articolo in cui convertire l'elemento di magazzino" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "L'articolo selezionato non è una valida opzione per la conversione" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Sottoallocazioni" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "L'articolo deve essere vendibile" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "L'elemento è assegnato a un ordine di vendita" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Elemento assegnato a un ordine di costruzione" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Cliente a cui assegnare elementi di magazzino" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "L'azienda selezionata non è un cliente" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Note sull'assegnazione delle scorte" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Deve essere fornito un elenco degli elementi di magazzino" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Note di fusione di magazzino" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Consenti fornitori non corrispondenti" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 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:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Consenti stato non corrispondente" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 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:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Devono essere riforniti almeno due elementi in magazzino" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Nessun cambiamento" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Valore di chiave primaria StockItem" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Note sugli spostamenti di magazzino" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "Ordini di Vendita" msgid "Return Orders" msgstr "Ordini di reso" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Nome utente" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Nome" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Nome dell'utente" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Cognome" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Cognome dell'utente" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Indirizzo email dell'utente" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Staff" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Questo utente ha i permessi dello staff" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superuser" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Questo utente è un superutente" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Questo account utente è attivo" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Il tuo account è stato creato." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Si prega di utilizzare la funzione di reimpostazione password per accedere" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Benvenuto in InvenTree" diff --git a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po index 44aa939697..833b1050b2 100644 --- a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -49,7 +49,7 @@ msgstr "データの提供がありません。" msgid "This field must be unique." msgstr "この項目は一意である必要があります。" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "ユーザーにこのモデルを表示する権限がありません" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "{original}を{unit}に変換できませんでした。" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "数量コードが無効です" @@ -104,13 +104,13 @@ msgstr "日付を入力する" msgid "Invalid decimal value" msgstr "無効な10進数値" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "メモ" @@ -123,75 +123,91 @@ msgstr "値 '{name}' はパターン形式で表示されません" msgid "Provided value does not match required pattern: " msgstr "指定された値が必要なパターンと一致しません: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "一度に1000以上のアイテムをシリアライズすることはできません。" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "シリアル番号は空です" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "重複シリアル" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "無効なグループです:{group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "グループ範囲 {group} が許容数量を超過 ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "シリアル番号が見つかりません" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "固有のシリアル番号の数({n})は数量({q})と一致する必要があります。" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "この値からHTMLタグを削除" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "データに禁止されているマークダウン・コンテンツが含まれています。" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "接続エラー" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "サーバは無効なステータスコードで応答しました" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "例外が発生しました" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "サーバーが無効なContent-Length値で応答しました" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "画像サイズが大きすぎます" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "画像のダウンロードが最大サイズを超えました" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "リモートサーバーが空のレスポンスを返しました" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "指定されたURLは有効な画像ファイルではありません" @@ -199,7 +215,7 @@ msgstr "指定されたURLは有効な画像ファイルではありません" msgid "Log in to the app" msgstr "アプリにログイン" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "メールアドレス" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "無効な選択です" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "お名前" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "説明" msgid "Description (optional)" msgstr "説明 (オプション)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "パス" @@ -320,51 +336,51 @@ msgstr "サーバーによってエラーが記録されました。" msgid "Image" msgstr "画像" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "有効な数字でなければなりません" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "通貨" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "利用可能なオプションから通貨を選択してください" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "この項目は空欄にできません。" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "無効な値です。" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "遠隔画像" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "外部画像ファイルのURL" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "外部URLからの画像ダウンロードは許可されていません" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "リモートURLからの画像ダウンロードに失敗しました" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "無効なコンテンツタイプ形式です" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "コンテンツタイプが見つかりません" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "コンテンツタイプが必須のミックスインクラスと一致しません" @@ -520,11 +536,11 @@ msgstr "中国語 (簡体字)" msgid "Chinese (Traditional)" msgstr "中国語 (繁体字)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "アップデートが利用可能" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "InvenTreeの更新版が利用可能になりました" @@ -536,7 +552,7 @@ msgstr "無効な物理単位" msgid "Not a valid currency code" msgstr "有効な通貨コードではありません。" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "注文ステータス" @@ -545,21 +561,21 @@ msgstr "注文ステータス" msgid "Parent Build" msgstr "親ビルド" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "バリアントを含む" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "バリアントを含む" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "バリアントを含む" msgid "Part" msgstr "パーツ" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "カテゴリ" @@ -653,16 +669,16 @@ msgstr "ツリーを除く" msgid "Build must be cancelled before it can be deleted" msgstr "削除するには、ビルドをキャンセルする必要があります。" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "消耗品" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "オプション" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "アセンブリ" @@ -671,32 +687,32 @@ msgstr "アセンブリ" msgid "Tracked" msgstr "追跡" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "テスト可能" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "受注残高" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "割り当てられた" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "消費されました" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "利用可能" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "注文中" @@ -704,26 +720,26 @@ msgstr "注文中" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "組立注文" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "場所" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "出力" @@ -767,8 +783,8 @@ msgstr "目標期日は開始日以降であること" msgid "Build Order Reference" msgstr "ビルド・オーダー・リファレンス" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "セールス・オーダー・リファレンス" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "ソース・ロケーション" @@ -845,16 +861,16 @@ msgstr "組立状況" msgid "Build status code" msgstr "ビルドステータスコード" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "バッチコード" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "このビルド出力のバッチコード" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "作成日時" @@ -875,7 +891,7 @@ msgstr "完成目標日" msgid "Target date for build completion. Build will be overdue after this date." msgstr "ビルド完了目標日。この日付を過ぎると、ビルドは期限切れになります。" -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "完了日" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "建設順序の優先順位" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "プロジェクトコード" @@ -948,7 +964,7 @@ msgstr "ビルドオーダー{build}が完了しました" msgid "A build order has been completed" msgstr "建設発注が完了しました" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "追跡可能な部品については、シリアル番号の提示が必要です。" @@ -964,23 +980,23 @@ msgstr "ビルド出力はすでに完了しています" msgid "Build output does not match Build Order" msgstr "ビルド出力がビルド順序と一致しません" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "数量はゼロより大きくなければなりません" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "数量が出力数量を上回ることはできません" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "ビルド出力は、必要なすべてのテストを通過していません" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "ビルド出力 {serial} は、必要なすべてのテストに合格していません。" @@ -1001,10 +1017,10 @@ msgstr "ビルドオーダーラインアイテム" msgid "Build object" msgstr "ビルドオブジェクト" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "ビルドオブジェクト" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "シリアル在庫の場合、数量は1でなければなりません msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "割当数量({q})は在庫可能数量({a})を超えてはなりません。" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "在庫が過剰配分" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "在庫商品" @@ -1083,378 +1099,378 @@ msgstr "仕向け地在庫品" msgid "Build Level" msgstr "ビルドレベル" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "部品名" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "ビルド出力" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "ビルド出力が親ビルドと一致しません" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "出力部分が BuildOrder 部分と一致しません。" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "このビルド出力はすでに完了しています" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "このビルド出力は完全に割り当てられていません" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "ビルド出力の数量を入力" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "追跡可能な部品に必要な整数個数" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "部品表には追跡可能な部品が含まれるため、必要な数量は整数" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "シリアル番号" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "ビルド出力のためのシリアル番号の入力" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "ビルド出力のストック位置" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "シリアル番号の自動割り当て" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "シリアル番号が一致する必要なアイテムを自動的に割り当て" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "以下のシリアル番号は既に存在するか、無効です。" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "ビルド出力のリストを提供する必要があります。" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "スクラップされたアウトプットの在庫場所" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "廃棄割り当て" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "廃棄されたアウトプットに割り当てられた在庫の破棄" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "ビルドアウトプットを廃棄する理由" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "完成した建造物のアウトプットの場所" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "不完全割当の受入れ" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "在庫が完全に割り当てられていない場合は、出力を完了します。" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "割当在庫の消費" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "このビルドに割り当て済みのストックを消費します。" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "不完全な出力の削除" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "完了していないビルド出力を削除します。" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "不可" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "このビルド・オーダーで消費されるものとして受け入れます。" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "このビルドオーダーを完了する前に割り当てを解除します。" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "総合在庫" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "製造オーダーに割り当てられた余分な在庫品をどのように処理しますか?" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "一部の在庫品目は全体的に配分されています。" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "未割り当ての受け入れ" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "在庫アイテムがこのビルド・オーダーに完全に割り当てられていないことを受け入れます。" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "必要在庫の配分が完了していません" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "インコンプリートの受け入れ" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "必要な数のビルドアウトプットが完了していないことを受け入れます。" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "必要な構築数量が完了していません" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "ビルド・オーダーには未完成の子ビルド・オーダーがあります。" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "受注生産状態であること" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "ビルド・オーダーの出力が不完全" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "組立ライン" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "ビルド出力" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "ビルド出力は同じビルド" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "ビルドラインアイテム" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.partは、ビルドオーダーと同じパーツを指す必要があります。" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "在庫があること" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "使用可能数量({q})を超過" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "追跡部品の割り当てには、ビルド出力を指定する必要があります。" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "追跡されていない部品の割り当てでは、ビルド出力を指定できません。" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "割り当て項目の提供" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "部品を調達する在庫場所(任意の場所から調達する場合は空白にしてください。)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "場所を除く" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "この選択された場所から在庫商品を除外" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "交換可能ストック" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "複数の拠点にある在庫品を交換可能" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "代替ストック" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "代替部品の割り当て" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "オプション" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "オプションのBOMアイテムをビルドオーダーに割り当てます。" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "BOMリファレンス" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "BOMパーツID" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "部品表 部品名" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "ビルド" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "サプライヤー" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "割当数量" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "ビルドリファレンス" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "部品分類名" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "追跡可能" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "継承" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "バリアントを許可" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "BOMアイテム" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "生産中" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "ビルド予定" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "外部在庫" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "在庫状況" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "利用可能な代替ストック" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "在庫状況" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "消費量が割り当て量を超過しています" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "在庫消費に関する任意の注記" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "ビルド項目は正しいビルドオーダーを指す必要があります" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "重複したビルド項目の割り当て" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "ビルドラインは正しいビルドオーダーを指す必要があります" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "重複したビルドラインの割り当て" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "少なくとも1つの項目または行を指示する必要があります" @@ -1478,7 +1494,7 @@ msgstr "保留中" msgid "Cancelled" msgstr "キャンセル済" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "期限切れ注文" msgid "Build order {bo} is now overdue" msgstr "ビルドオーダー{bo}は現在期限切れです" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "リンク" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "ファイル" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "ユーザーにはこれらの添付ファイルを削除する権限がありません。" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "ユーザーにはこの添付ファイルを削除する権限がありません" @@ -1534,11 +1550,11 @@ msgstr "有効な通貨コードはありません" msgid "No plugin" msgstr "プラグインなし" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "プロジェクトコードラベル" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "更新しました" @@ -1600,7 +1616,7 @@ msgstr "キー文字列は一意でなければなりません。" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "ユーザー" msgid "Price break quantity" msgstr "価格破壊数量" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "価格" @@ -1633,10 +1649,10 @@ msgstr "このウェブフックを受信するエンドポイント" msgid "Name for this webhook" msgstr "このウェブフックの名前" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "有効" @@ -1660,11 +1676,11 @@ msgstr "シークレット" msgid "Shared secret for HMAC" msgstr "HMACの共有秘密" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "メッセージ ID:" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "このメッセージの一意な識別子" @@ -1714,7 +1730,7 @@ msgstr "タイトル" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "投稿者" msgid "Summary" msgstr "概要" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "既読" @@ -1797,7 +1813,7 @@ msgstr "ファイルがありません" msgid "Missing external link" msgstr "外部リンクが見つかりません。" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "モデルタイプ" @@ -1833,7 +1849,7 @@ msgstr "ファイルサイズ" msgid "File size in bytes" msgstr "ファイルサイズ(バイト" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "添付ファイルに指定されたモデルタイプが無効です" @@ -1861,7 +1877,7 @@ msgstr "論理キー" msgid "State logical key that is equal to this custom state in business logic" msgstr "ビジネスロジックでこのカスタムステートに等しいステート論理キー" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "値" @@ -1874,7 +1890,7 @@ msgstr "モデルのデータベースに保存される数値" msgid "Name of the state" msgstr "都道府県名" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "ラベル" @@ -1930,7 +1946,7 @@ msgstr "論理キーは、参照ステータスの論理キーに含まれてい msgid "Name must be different from the names of the reference status" msgstr "リファレンス・ステータスの名前とは異なっていなければならない。" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "セレクションリスト" @@ -1982,7 +1998,7 @@ msgstr "デフォルトエントリー" msgid "Default entry for this selection list" msgstr "この選択リストのデフォルト項目" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "作成日" @@ -1998,334 +2014,334 @@ msgstr "最終更新" msgid "Date and time that the selection list was last updated" msgstr "選択リストが最後に更新された日時" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "セレクションリスト入力" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "セレクションリスト" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "このエントリーが属する選択リスト" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "選択リストエントリーの値" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "選択リスト項目のラベル" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "選択リスト項目の説明" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "この選択リストはアクティブですか?" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "パラメータテンプレート" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "パラメータテンプレート" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "チェックボックスのパラメータに単位を指定することはできません。" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "チェックボックスパラメータに選択肢を持たせることはできません。" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "選択肢はユニークでなければなりません" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "パラメータ・テンプレート名は一意でなければなりません。" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "このパラメータテンプレートにおける対象モデルタイプ" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "パラメータ名" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "単位" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "このパラメータの物理単位" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "パラメータの説明" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "チェックボックス" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "このパラメータはチェックボックスですか?" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "選択肢" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "このパラメータの有効な選択肢(カンマ区切り)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "このパラメータの選択リスト" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "有効" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "このパラメータテンプレートは有効ですか?" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "パラメータ" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "パラメータ" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "パラメータ値の選択が無効" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "パラメータに対して無効なモデルタイプが指定されています" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "モデルID" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "このパラメータの対象となるモデルのID" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "テンプレート" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "パラメータテンプレート" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "データ" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "パラメータ値" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "備考" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "任意のメモ欄" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "バーコードスキャン" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "バーコードデータ" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "バーコードをスキャンしたユーザー" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "タイムスタンプ" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "バーコードスキャンの日時" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "バーコードを処理したURLエンドポイント" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "コンテキスト" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "バーコードスキャンのコンテキストデータ" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "返答" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "バーコードスキャンによるレスポンスデータ" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "結果" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "バーコードスキャンは成功しましたか?" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "エラーが発生しました" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: メールログの削除は保護されています。削除を許可するには、INVENTREE_PROTECT_EMAIL_LOG を False に設定してください。" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "メールメッセージ" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "メールメッセージ" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "発表されました" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "送信" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "失敗" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "配送済み" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "確認済み" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "インバウンド" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "アウトバウンド" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "返信なし" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "配送状況を記録" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "読み取りを記録" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "クリックを記録" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "グローバルID" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "このメッセージの識別子(外部システムから提供される場合があります)" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "スレッドID" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "このメッセージスレッドの識別子(外部システムから提供される場合があります)" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "スレッド" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "このメッセージに関連するスレッド" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "優先順位" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "メールのスレッド" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "メールのスレッド" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "キー" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "このスレッドの固有キー(スレッドを識別するために使用されます)" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "このスレッドの固有識別子" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "内部を開始しました" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "このスレッドは内部で開始されたものですか?" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "スレッドが作成された日時" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "スレッドが最後に更新された日時" @@ -2375,1243 +2391,1259 @@ msgstr "環境変数によって設定が上書きされるかどうかを示し msgid "Override" msgstr "上書き" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "走行中" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "保留タスク" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "スケジュールされたタスク" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "失敗したタスク" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "タスクID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "ユニークなタスクID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "ロック" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "ロック時間" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "タスク名" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "関数" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "機能名" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "引数" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "タスク引数" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "キーワード論争" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "タスクキーワード引数" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "ファイル名" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "モデルタイプ" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "このモデルの添付ファイルを作成または編集する権限がありません。" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "ユーザーは、このモデルのパラメータを作成または編集する権限がありません。" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "選択リストがロックされています" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "グループなし" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "サイトのURLが設定によってロックされています" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "再起動が必要" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "サーバーの再起動を必要とする設定が変更されました。" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "保留中の移行" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "保留中のデータベース移行数" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "有効な警告コード" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "有効な警告コードの辞書" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "インスタンスID" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "このInvenTreeインスタンスの一意識別子" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "アナウンスID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "サーバーのインスタンスIDをサーバーステータス情報でアナウンス(認証なし)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "サーバーインスタンス名" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "サーバーインスタンスの文字列記述子" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "インスタンス名を使用" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "タイトルバーにインスタンス名を使用" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "about`を表示する制限" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "スーパーユーザーにのみ `about` モーダルを表示します。" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "会社名" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "社内社名" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "ベース URL" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "サーバーインスタンスのベースURL" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "デフォルトの通貨" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "価格計算のベース通貨を選択" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "対応通貨" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "対応通貨コード一覧" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "通貨の更新間隔" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "為替レートの更新頻度 (ゼロに設定すると無効になります)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "日" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "通貨更新プラグイン" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "通貨更新プラグイン" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "URLからダウンロード" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "外部URLからの画像ダウンロードを許可する" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "ダウンロードサイズ制限" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "外部URL画像の最大サイズ" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "URLからのダウンロードに使用されるユーザーエージェント" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "外部URLから画像やファイルをダウンロードする際に使用するユーザーエージェントを上書きすることができます。" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "厳格なURLバリデーション" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "URL検証時にスキーマ指定を要求" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "更新チェック間隔" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "アップデートをチェックする頻度 (ゼロに設定すると無効になります)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "自動バックアップ" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "データベースとメディアファイルの自動バックアップ" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "自動バックアップ間隔" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "自動バックアップイベント間の日数を指定" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "タスク削除間隔" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "バックグラウンドタスクの結果は、指定した日数後に削除されます。" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "エラーログ削除間隔" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "エラーログは指定した日数後に削除されます。" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "通知削除間隔" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "ユーザー通知は指定された日数後に削除されます。" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "メール削除間隔" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "メールメッセージは、指定された日数が経過後に削除されます。" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "メールログの保護" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "メールログエントリの削除を防止します" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "バーコードサポート" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "ウェブインターフェイスでバーコードスキャナのサポートを有効にします。" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "店舗バーコード結果" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "バーコードスキャン結果をデータベースに保存" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "バーコードスキャン最大カウント" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "バーコードスキャン結果の最大保存数" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "バーコード入力遅延" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "バーコード入力処理遅延時間" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "バーコードウェブカメラサポート" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "ブラウザのウェブカメラでバーコードのスキャンが可能" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "バーコード表示データ" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "バーコードデータをテキストとしてブラウザに表示" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "バーコード生成プラグイン" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "内部バーコードデータ生成に使用するプラグイン" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "部品改訂" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "パートのリビジョンフィールドを有効にします。" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "アセンブリ改訂のみ" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "組立部品のみ修正可能" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "アセンブリからの削除を許可" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "アセンブリで使用されている部品の削除を許可します。" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "IPN 正規表現" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "部分IPNにマッチする正規表現パターン" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "IPNの重複を許可" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "複数のパートが同じIPNを共有できるようにします。" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "IPNの編集を許可" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "部品編集中にIPN値の変更を許可" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "部品表データのコピー" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "部品複製時にBOMデータをデフォルトでコピー" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "部品パラメータデータのコピー" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "部品複製時にデフォルトでパラメータデータをコピー" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "コピー部品テストデータ" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "部品複製時にテストデータをデフォルトでコピー" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "カテゴリー・パラメーター・テンプレートのコピー" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "部品作成時のカテゴリー・パラメーター・テンプレートのコピー" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "パーツはデフォルトのテンプレートです" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "パーツはデフォルトで他のコンポーネントから組み立てることができます" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "コンポーネント" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "パーツはデフォルトでサブコンポーネントとして使用できます" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "購入可能" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "パーツはデフォルトで購入可能です" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "販売可能" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "パーツはデフォルトで販売可能です" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "パーツはデフォルトで追跡可能です" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "バーチャル" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "パーツはデフォルトでバーチャル" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "関連部品を表示" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "部品の関連部品を表示" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "初期在庫データ" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "新規部品追加時に初期在庫を作成可能" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "サプライヤー初期データ" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "新しい部品を追加する際に、最初のサプライヤーデータを作成できるようにします。" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "部品名表示形式" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "部品名の表示形式" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "パーツカテゴリー デフォルトアイコン" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "パートカテゴリのデフォルトアイコン(空はアイコンがないことを意味します)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "価格の最小桁数" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "価格データのレンダリング時に表示する最小小数点以下の桁数" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "価格の小数点以下の桁数" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "価格データのレンダリング時に表示する小数点以下の桁数の最大値" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "サプライヤー価格の利用" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "全体的な価格計算にサプライヤーの価格破壊を含めること" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "購入履歴の上書き" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "過去の発注価格がサプライヤーの価格変動を上書き" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "ストックアイテム価格を使用" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "手動入力された在庫データから価格計算を行います。" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "在庫商品の価格設定年齢" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "この日数より古い在庫品を価格計算から除外します。" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "バリアント価格を使用" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "全体的な価格計算にバリアント価格を含む" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "アクティブバリアントのみ" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "バリアント価格の計算には、アクティブなバリアントパーツのみを使用します。" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "自動更新の価格設定" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "内部データが変更された際に、部品価格を自動的に更新します。" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "価格の再構築間隔" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "部品価格が自動的に更新されるまでの日数" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "社内価格" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "部品の内部価格の有効化" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "内部価格オーバーライド" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "利用可能な場合、内部価格は価格帯の計算より優先されます。" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "ラベル印刷の有効化" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "ウェブインターフェースからラベル印刷を有効にします。" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "ラベル画像DPI" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "ラベル印刷プラグインに供給する画像ファイルを生成する際のDPI解像度" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "レポートの有効化" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "レポートの作成" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "デバッグモード" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "デバッグモードでのレポート生成(HTML出力)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "ログレポートエラー" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "レポート生成時に発生するエラーのログ" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "ページサイズ" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "PDFレポートのデフォルトのページサイズ" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "パラメータ単位の強制" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "単位が指定されている場合、パラメータ値は指定された単位に一致する必要があります。" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "世界的にユニークな連載" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "在庫品のシリアル番号はグローバルに一意でなければなりません。" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "枯渇在庫の削除" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "ストックアイテムが枯渇した場合のデフォルトの動作を決定します。" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "バッチコードテンプレート" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "ストックアイテムのデフォルトバッチコード生成用テンプレート" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "有効期限" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "在庫期限切れ機能の有効化" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "期限切れ株式の売却" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "期限切れ株式の売却を許可" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "在庫切れ時間" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "在庫品が期限切れとみなされるまでの日数" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "賞味期限切れ在庫の処理" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "期限切れの在庫を使用した建物の建築を許可" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "株式所有権" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "ストックロケーションとアイテムの所有権管理" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "在庫場所 デフォルトアイコン" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "在庫場所のデフォルトアイコン(空はアイコンがないことを意味します。)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "インストール済みストックアイテムの表示" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "ストックテーブルにインストールされたストックアイテムを表示" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "アイテム取り付けの際はBOMをチェック" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "親部品のBOMには、インストールされたストックアイテムが存在する必要があります。" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "在庫切れの転送を許可" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "在庫のないストックアイテムをストックロケーション間で移動可能" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "ビルド・オーダー参照パターン" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "Build Order参照フィールドの生成に必要なパターン" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "責任ある所有者を要求" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "各注文には、責任ある所有者を指定する必要があります。" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "アクティブパートが必要" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "非稼動部品の製造オーダー作成を防止" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "ロックされた部分を要求" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "ロックされていない部品の製造オーダー作成を防止" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "有効なBOMが必要" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "BOMが検証されない限り、製造オーダーが作成されないようにします。" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "クローズド・チャイルド・オーダー" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "すべてのチャイルドオーダーが終了するまで、ビルドオーダーの完了を防止します。" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "外部ビルドオーダー" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "外部ビルドオーダー機能の有効化" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "テストがパスするまでブロック" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "必要なテストがすべて合格するまで、ビルド出力が完了しないようにします。" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "返品注文の有効化" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "ユーザーインターフェイスで返品注文機能を有効にします。" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "リターンオーダー参照パターン" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "返品注文参照フィールドの生成に必要なパターン" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "完了した返品注文の編集" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "注文完了後の返品注文の編集が可能" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "販売注文参照パターン" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "販売注文参照フィールドの生成に必要なパターン" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "販売注文のデフォルト出荷" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "販売注文でデフォルト出荷を作成可能" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "完了した販売注文の編集" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "出荷または完了後の販売注文の編集を許可します。" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "出荷には確認が必要です" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "商品が確認されるまで、出荷の完了をお控えください。" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "出荷された注文を完了としてマーク" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "出荷済みと表示された販売注文は、「出荷済み」ステータスを回避して自動的に完了します。" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "発注書参照パターン" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "発注書参照フィールドの生成に必要なパターン" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "完了した発注書の編集" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "出荷後または完了後の発注書の編集が可能" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "通貨の変換" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "在庫を受け取る際、商品価値を基準通貨に変換" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "自動発注" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "すべての品目を受領した時点で、発注書を完了として自動的にマーク" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "パスワード忘れ" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "ログインページでのパスワード忘れ防止機能の有効化" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "登録の有効化" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "ログインページでユーザーの自己登録を可能にします。" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "SSOの有効化" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "ログインページでSSOを有効化" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "SSO登録の有効化" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "ログインページでSSOによるユーザーの自己登録を可能にします。" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "SSOグループ同期の有効化" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "InvenTreeグループとIdPが提供するグループの同期を有効にします。" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "SSOグループキー" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "IdP が提供する groups claim 属性の名前。" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "SSOグループマップ" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "SSOグループからローカルのInvenTreeグループへのマッピング。ローカル・グループが存在しない場合は、作成されます。" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "SSO外のグループを削除" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "ユーザーに割り当てられたグループがIdPによってバックエンドされていない場合に削除するかどうか。この設定を無効にすると、セキュリティ上の問題が発生する可能性があります。" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "メールアドレスは必須です" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "サインアップ時にメールの入力を要求" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "SSOユーザーの自動入力" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "SSOアカウントデータからユーザー詳細を自動入力" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "メール2回" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "サインアップの際、ユーザーに2度メールを尋ねます。" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "パスワード2回" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "サインアップ時にパスワードを2回要求" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "許可ドメイン" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "特定のドメイン(@で始まるカンマ区切り)へのサインアップを制限します。" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "登録時のグループ" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "新規ユーザ登録時に割り当てられるグループ。SSOグループ同期が有効な場合、このグループはIdPからグループを割り当てられない場合にのみ設定されます。" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "MFAの実施" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "ユーザーは多要素セキュリティを使用する必要があります。" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "起動時にプラグインをチェック" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "起動時にすべてのプラグインがインストールされていることを確認 - コンテナ環境では有効にします。" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "プラグインのアップデートの確認" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "インストールされているプラグインのアップデートを定期的にチェックします。" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "URL統合の有効化" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "プラグインがURLルートを追加できるようにします" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "ナビゲーション統合の有効化" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "プラグインをナビゲーションに統合可能" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "アプリとの統合" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "プラグインを有効にしてアプリを追加" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "スケジュール統合の有効化" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "スケジュールタスクを実行するプラグインの有効化" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "イベント統合の有効化" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "プラグインが内部イベントに応答できるようにします。" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "インターフェース統合の有効化" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "プラグインがユーザー・インターフェースに統合できるようにします。" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "メール連携を有効にする" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "プラグインを有効にして、送信/受信メールを処理できるようにします" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "プロジェクトコードの有効化" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "プロジェクトを追跡するためのプロジェクトコードの有効化" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "過去の在庫数量および価値を記録する機能を有効にします" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "外部ロケーションを除く" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "自動引取期間" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "ユーザーのフルネームを表示" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "ユーザー名の代わりにフルネームを表示" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "ユーザープロファイルの表示" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "プロフィールページにユーザーのプロフィールを表示" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "テストステーションデータの有効化" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "テスト結果のテストステーションデータ収集の有効化" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "マシン ping を有効にする" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "登録されたマシンの状態を確認するため、定期的なpingタスクを有効にしてください" @@ -3956,33 +3988,33 @@ msgstr "パートはアクティブ" msgid "Manufacturer is Active" msgstr "メーカーはアクティブ" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "サプライヤーが活動中" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "内部はアクティブ" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "サプライヤーの活動" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "製造元" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "会社名" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "在庫あり" @@ -4071,7 +4103,7 @@ msgstr "納税者番号" msgid "Company Tax ID" msgstr "法人税番号" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "住所" @@ -4163,7 +4195,7 @@ msgstr "社内用出荷注意事項" msgid "Link to address information (external)" msgstr "住所情報へのリンク(外部)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "メーカー・パーツ" @@ -4181,12 +4213,12 @@ msgstr "部品を選択" msgid "Select manufacturer" msgstr "メーカー選択" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "MPN" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "メーカー品番" @@ -4210,8 +4242,8 @@ msgstr "パック単位はゼロより大きくなければなりません。" msgid "Linked manufacturer part must reference the same base part" msgstr "リンクされたメーカー部品は、同じベース部品を参照する必要があります。" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "仕入先" msgid "Select supplier" msgstr "サプライヤーを選択" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "サプライヤー在庫管理ユニット" @@ -4258,8 +4290,8 @@ msgstr "基本料金" msgid "Minimum charge (e.g. stocking fee)" msgstr "ミニマムチャージ(例:仕入れ手数料)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "パッケージング" @@ -4307,14 +4339,18 @@ msgstr "このサプライヤーで使用されるデフォルト通貨" msgid "Company Name" msgstr "会社名" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "在庫あり" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "価格割り引き" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "データのエクスポート中にエラーが発生しました" @@ -4419,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "レコードの既存データベース識別子" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "カラムはすでにデータベースのフィールドにマッピングされています。" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "フィールドはすでにデータ列にマッピングされています。" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "カラムマッピングは有効なインポートセッションにリンクされている必要があります。" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "カラムがデータファイルに存在しません。" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "対象モデルにフィールドが存在しない" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "選択されたフィールドは読み取り専用です。" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "インポートセッション" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "フィールド" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "列" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "行インデックス" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "元の行データ" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "エラー" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "有効" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "既存の記録を更新するにはIDが必要です。" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "指定のIDで該当する記録は見つかりませんでした" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "無効なID形式が指定されました" @@ -4579,7 +4615,7 @@ msgstr "各ラベルの印刷部数" msgid "Connected" msgstr "接続済み" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "不明" @@ -4711,7 +4747,7 @@ msgstr "進行状況タイプの場合の最大値。type=progress の場合に msgid "Order Reference" msgstr "注文参照" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "並外れた" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "価格" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "完成前" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "終了後" @@ -4779,17 +4815,17 @@ msgstr "終了後" msgid "External Build Order" msgstr "外部ビルドオーダー" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "注文" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "注文完了" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "内部パーツ" @@ -4797,27 +4833,27 @@ msgstr "内部パーツ" msgid "Order Pending" msgstr "注文保留" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "完了" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "出荷あり" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "注文" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "注文" msgid "Sales Order" msgstr "セールスオーダー" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "指定の会社と住所が一致しません" msgid "Order description (optional)" msgstr "ご注文内容(任意)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "この注文のプロジェクトコードを選択してください。" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "外部ページへのリンク" @@ -4886,7 +4922,7 @@ msgstr "開始日" msgid "Scheduled start date for this order" msgstr "本注文の開始予定日" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "終了日に達したら" @@ -4919,413 +4955,421 @@ msgstr "本注文に関する連絡先" msgid "Company address for this order" msgstr "本注文の会社住所" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "注文参照" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "ステータス" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "発注状況" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "注文元の会社" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "サプライヤー・リファレンス" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "サプライヤー注文参照コード" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "受信" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "注文完了日" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "目的地" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "入荷商品のお届け先" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "部品サプライヤーは、POサプライヤーと一致する必要があります。" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "品目が発注書と一致しません" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "行項目にリンクされた部品が不足しています" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "数量は正の数でなければなりません。" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "顧客" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "販売先" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "販売注文状況" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "お客様リファレンス" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "顧客注文参照コード" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "出荷日" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "出荷元" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "注文はすでに完了しています。" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "注文はすでにキャンセルされました" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "未完了の注文にのみ完了マークを付けることができます。" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "出荷に不備があるため、注文を完了できません。" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "割り当てに不備があるため、注文を完了できません。" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "不完全な項目があるため、注文を完了できません。" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "注文はロックされ、変更できません。" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "品目数量" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1822 msgid "Line item reference" msgstr "行項目参照" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "項目" -#: order/models.py:1822 +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "この行項目の目標期日(注文の目標期日を使用する場合は空白のままにしてください。)" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "行項目の説明(オプション)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "この行の補足説明" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "単価" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "発注書項目" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "サプライヤーの部品はサプライヤーと一致しなければなりません。" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "ビルドオーダーは外部としてマークする必要があります" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "ビルドオーダーはアセンブリ部品にのみリンクできます" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "ビルドオーダーの部品は、ラインアイテムの部品と一致する必要があります。" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "サプライヤー" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "受信" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "受領品目数" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "購入金額" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "購入単価" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "本品目により完成する外部ビルドオーダー" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "発注書追加行" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "販売注文明細" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "販売可能な部品のみを販売オーダーに割り当てることができます。" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "セール価格" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "販売単価" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "発送済み" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "出荷数量" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "販売注文の出荷" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "配送先住所はお客様と一致している必要があります" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "こちらの発送先住所" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "出荷日" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "配達日" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "貨物の引渡日" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "チェック済み" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "この貨物をチェックしたユーザー" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "発送" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "出荷番号" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "追跡番号" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "貨物追跡情報" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "請求書番号" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "関連する請求書の参照番号" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "発送済み" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "出荷品目に割り当てられた在庫がありません" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "出荷は完了前に必ず確認が必要となります" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "セールスオーダー追加ライン" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "販売注文の割り当て" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "在庫アイテムが割り当てられていません" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "在庫品を別部品のラインに割り当てることはできません。" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "部品のないラインに在庫を割り当てることはできません。" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "割当数量が在庫数量を超えることはできません" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "割当数量はゼロより大きくなければなりません" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "シリアル化された在庫品の場合、数量は1でなければなりません。" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "販売注文と出荷が一致しません" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "出荷が販売注文と一致しません" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "ライン" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "販売注文の出荷参照" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "アイテム" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "割り当てるストックアイテムを選択" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "在庫割当数量の入力" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "リターンオーダー参照" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "返品元の会社" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "返品状況" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "返品注文項目" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "在庫品の指定が必要です。" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "返品数量が在庫数量を超える場合" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "返品数量はゼロより大きくなければなりません。" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "シリアル化されたストックアイテムの数量が無効です。" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "お客様から返品する商品を選択" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "受領日" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "転帰" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "この項目の成果" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "この品目の返品または修理に関連する費用" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "リターンオーダー追加ライン" @@ -5353,7 +5397,7 @@ msgstr "余分な行をコピー" msgid "Copy extra line items from the original order" msgstr "元の注文から余分な項目をコピー" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "コピーパラメータ" @@ -5372,216 +5416,216 @@ msgstr "ラインアイテム" msgid "Completed Lines" msgstr "完成路線" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "重複した注文" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "この注文を複製するためのオプションを指定します。" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "無効なオーダーID" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "サプライヤー名" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "ご注文のキャンセルはできません。" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "未完了の行項目で注文を閉じることができます。" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "注文に不備がある場合" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "ご注文は受け付けておりません。" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "自動車価格" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "サプライヤーの部品データに基づいて購入価格を自動計算" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "購入価格通貨" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "アイテムのマージ" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "同じ品目、同じ仕向け地、同じ日付の品目を1つの品目に統合します。" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "内部部品番号" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "内部部品名" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "サプライヤー部品の指定が必要" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "注文書の指定が必要" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "サプライヤーは発注書と一致しなければなりません。" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "発注書はサプライヤーと一致している必要があります。" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "明細" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "受取商品の配送先選択" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "入荷在庫品のバッチコード入力" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "有効期限" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "入荷在庫の有効期限の入力" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "入荷した在庫品のシリアル番号の入力" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "入荷在庫品の包装情報の上書き" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "在庫品の入荷に関する注意事項" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "バーコード" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "スキャンされたバーコード" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "バーコードはすでに使用されています" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "項目は必ずご記入ください。" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "デスティネーション・ロケーションを指定する必要があります。" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "バーコードの値は一意でなければなりません。" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "発送" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "完了した出荷" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "販売価格通貨" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "割当項目" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "出荷の詳細は記載されていません" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "ラインアイテムは、この注文に関連付けられていません。" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "数量は正数でなければなりません。" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "割り当てるシリアル番号を入力" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "出荷済み" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "この注文には出荷が関連付けられていません" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "以下のシリアル番号に該当するものは見つかりませんでした。" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "以下のシリアル番号はご利用いただけません。" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "返品注文項目" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "ラインアイテムが返品オーダーと一致しません" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "ラインアイテムはすでに受領済み" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "商品の受け取りは、進行中の注文に対してのみ可能です。" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "返品数量" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "ライン価格通貨" @@ -5797,7 +5841,7 @@ msgstr "このカテゴリの部品のデフォルトキーワード" msgid "Icon" msgstr "アイコン" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "アイコン (オプション)" @@ -5818,7 +5862,7 @@ msgstr "初期値" msgid "Default Parameter Value" msgstr "パラメータのデフォルト値" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "パーツ" @@ -5933,7 +5977,7 @@ msgstr "検索結果での視認性を向上させる部分キーワード" msgid "Part category" msgstr "パーツカテゴリ" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "即時支払通知" @@ -5942,7 +5986,7 @@ msgstr "即時支払通知" msgid "Part revision or version number" msgstr "部品のリビジョンまたはバージョン番号" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "リビジョン" @@ -5966,7 +6010,7 @@ msgstr "デフォルトの有効期限" msgid "Expiry time (in days) for stock items of this part" msgstr "この部品の在庫品の有効期限(日単位" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "最小在庫" @@ -6447,355 +6491,355 @@ msgstr "部品とそれ自身との間に部品関係を作ることはできま msgid "Duplicate relationship already exists" msgstr "重複する関係が既に存在します。" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "親カテゴリ" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "親部品カテゴリー" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "サブカテゴリ" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "結果" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "このテンプレートに対して記録された結果の数" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "この在庫商品の購入通貨" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "ファイルが画像ではありません" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "オリジナルパート" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "複製する元の部品を選択" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "コピー画像" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "元の部分から画像をコピー" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "コピーBOM" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "元の部品から部品表をコピー" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "元の部品からパラメータデータをコピー" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "コピーノート" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "元のパートからメモをコピー" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "コピーテスト" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "元の部品からテスト用テンプレートをコピーしてください" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "初期在庫量" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "この部品の初期在庫数量を指定します。数量が0の場合、在庫は追加されません。" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "初期在庫場所" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "この部品の初期在庫場所を指定してください。" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "サプライヤーを選択してください。" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "メーカーを選択してください。" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "メーカー品番" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "選択された企業は有効なサプライヤーではありません。" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "選択された会社は有効な製造業者ではありません。" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "このMPNに一致するメーカー部品はすでに存在します。" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "このSKUに一致するサプライヤー部品は既に存在します。" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "カテゴリ名" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "建物" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "現在生産中の当該部品の数量" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "この部品の予定生産数量" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "在庫商品" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "リビジョン" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "総在庫" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "未割当株式" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "バリアントストック" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "重複部分" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "別のパートから初期データをコピー" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "初期在庫" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "初期在庫数で部品を作成" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "サプライヤー情報" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "この部品の初期サプライヤー情報を追加します。" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "コピーカテゴリパラメータ" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "選択したパーツカテゴリーからパラメータテンプレートをコピー" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "既存イメージ" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "既存の部品画像のファイル名" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "画像ファイルが存在しません" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "部品表全体の検証" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "ビルド" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "ビルドオーダーに必要なもの" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "ビルドオーダーに割り当てられました" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "セールスオーダーに必要なもの" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "セールスオーダーに割り当てられました" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "最小価格" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "最低価格の計算値の上書き" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "最低価格通貨" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "最大価格" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "最高価格の計算値を上書き" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "最高価格通貨" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "更新" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "この部品の価格を更新" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "提供された通貨から{default_currency}に変換できませんでした。" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "最低価格は最高価格を超えてはなりません。" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "最高価格は最低価格を下回ってはなりません。" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "親アセンブリを選択" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "構成部品の選択" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "BOMをコピーする部品を選択します。" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "既存データの削除" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "コピー前に既存のBOMアイテムを削除" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "インクルード継承" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "テンプレート化された部品から継承されたBOM項目を含めます。" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "無効な行をスキップ" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "無効な行をスキップするには、このオプションを有効にします。" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "コピー代用部品" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "BOMアイテムの重複時に代替部品をコピー" @@ -7516,7 +7560,7 @@ msgstr "ボーダー" msgid "Print a border around each label" msgstr "各ラベルの周囲に枠線を印刷します。" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "ランドスケープ" @@ -7596,64 +7640,77 @@ msgstr "TMEバーコードのスキャンをサポートします。" msgid "The Supplier which acts as 'TME'" msgstr "「TME」として活動するサプライヤー" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "スタッフユーザーのみがプラグインを管理できます" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "プラグインのインストールが無効" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "プラグインのインストールに成功しました" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "{path} にプラグインをインストール" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "プラグインがレジストリに見つかりませんでした" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "プラグインはパッケージ化されていません" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "プラグインパッケージ名が見つかりません" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "スタッフユーザーのみがプラグインを管理できます" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "プラグインのアンインストールが無効" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "プラグインがアクティブなため、アンインストールできません。" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "このプラグインは必須のため、アンインストールすることはできません。" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "このプラグインはサンプルプラグインのため、アンインストールすることはできません。" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "プラグインは組み込みプラグインのため、アンインストールすることはできません。" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "プラグインがインストールされていません" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "プラグインのインストールが見つかりません" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "プラグインのアンインストールに成功" @@ -7900,55 +7957,55 @@ msgstr "設置未確認" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "フルリロード" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "プラグインレジストリのフルリロードを実行します。" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "強制リロード" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "プラグイン・レジストリがすでにロードされていても、強制的に再ロードします。" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "プラグインの収集" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "プラグインの収集とレジストリへの追加" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "プラグインを有効化" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "このプラグインを有効化します" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "必須プラグインは無効化できません" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "設定の削除" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "データベースからプラグイン設定を削除します" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "この設定が適用されるユーザー" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "アイテム" @@ -7964,7 +8021,7 @@ msgstr "プラグインはラベル印刷をサポートしていません" msgid "Invalid label dimensions" msgstr "無効なラベル寸法" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "テンプレートに有効な項目がありません" @@ -7988,152 +8045,156 @@ msgstr "文字" msgid "Template file with this name already exists" msgstr "この名前のテンプレートファイルは既に存在します。" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "テンプレート名" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "テンプレート説明" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "リビジョン番号(自動インクリメント)" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "プリントのモデルに装着" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "印刷時に、リンクされたモデルインスタンスに対してレポート出力を添付ファイルとして保存" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "ファイル名パターン" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "ファイル名生成パターン" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "テンプレートが有効" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "テンプレートの対象モデルタイプ" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "フィルター" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "テンプレートクエリフィルタ(key=valueペアのカンマ区切りリスト)" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "テンプレートファイル" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "PDFレポートのページサイズ" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "レポートを横向きにレンダリング" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "統合" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "選択された項目に対して単一のレポートを生成します" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "テンプレート{self.name}から生成されたレポート" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "テンプレートの構文エラー" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "レポートの表示にエラーが発生しました" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "レポート生成エラー" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "レポート出力の統合エラー" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "幅 [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "ラベル幅(mm単位)" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "高さ [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "ラベルの高さ(mm単位)" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "ラベル印刷エラー" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "スニペット" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "レポートスニペットファイル" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "スニペットファイルの説明" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "資産" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "レポート資産ファイル" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "アセットファイルの説明" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "レポートテンプレートの選択" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "レポートに含める項目の主キーのリスト" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "ラベルテンプレートの選択" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "印刷プラグイン" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "ラベル印刷に使用するプラグインを選択します。" @@ -8231,7 +8292,7 @@ msgstr "在庫品テストレポート" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "設置項目" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "part_image タグには Part インスタンスが必要です。" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "company_image タグには Company インスタンスが必要です。" @@ -8304,7 +8365,7 @@ msgstr "トップレベルのロケーションによるフィルタリング" msgid "Include sub-locations in filtered results" msgstr "フィルタリング結果にサブロケーションを含めることができます。" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "親の位置" @@ -8388,7 +8449,7 @@ msgstr "有効期限" msgid "Expiry date after" msgstr "有効期限" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "期限失効" @@ -8522,7 +8583,7 @@ msgstr "部品の指定が必要" msgid "Stock items cannot be located into structural stock locations!" msgstr "在庫品は、構造的な在庫場所に配置することはできません!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "仮想部品にストックアイテムを作成できません" @@ -8567,7 +8628,7 @@ msgstr "この在庫品に一致するサプライヤー部品を選択してく msgid "Where is this stock item located?" msgstr "この在庫品はどこにありますか?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "この在庫品は以下の梱包で保管されています。" @@ -8583,7 +8644,7 @@ msgstr "このアイテムは他のアイテムにインストールされてい msgid "Serial number for this item" msgstr "この商品のシリアル番号" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "このストックアイテムのバッチコード" @@ -8696,7 +8757,7 @@ msgstr "在庫品は現在生産中です。" msgid "Serialized stock cannot be merged" msgstr "連番在庫の統合はできません" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "在庫品の重複" @@ -8820,7 +8881,7 @@ msgstr "シリアル番号を生成する部品を選択します。" msgid "Quantity of serial numbers to generate" msgstr "生成するシリアル番号の数" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "この結果のテストテンプレート" @@ -8844,222 +8905,222 @@ msgstr "親アイテム" msgid "Parent stock item" msgstr "親株式" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "数量はパック数です。" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "パッケージサイズを使用" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "新しい商品のシリアル番号の入力" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "サプライヤー品番" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "期限切れ" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "子供用品" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "追跡項目" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "この在庫品の購入価格、単位またはパックあたり" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "シリアル化するストックアイテムの数を入力" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "在庫品目がしていされていません" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "数量は在庫数 ({q}) を超えてはなりません。" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "仕向け地" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "この部品にシリアル番号を割り当てることはできません" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "シリアル番号が既に存在します" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "インストールするストックアイテムを選択" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "設置数量" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "インストールするアイテムの数量を入力してください。" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "取引メモの追加(オプション)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "設置数量は1台以上" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "在庫がありません" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "選択した部品が部品表にない" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "設置する数量は、利用可能な数量を超えてはなりません。" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "アンインストール先の場所" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "在庫品を変換する部品を選択" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "選択された部分は、変換のための有効なオプションではありません。" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "SupplierPartが割り当てられている在庫品を変換できません。" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "在庫商品ステータスコード" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "ステータスを変更するストックアイテムを選択" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "ストックアイテムが選択されていません" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "サブロケーション" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "親株式所在地" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "パーツは販売可能でなければなりません" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "商品が販売オーダーに割り当てられています。" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "アイテムがビルドオーダーに割り当てられています。" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "在庫アイテムを割り当てるお客様" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "選択された企業は顧客ではありません" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "株式譲渡に関する注意事項" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "在庫品のリストが必要です。" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "株式併合に関する注意事項" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "不一致のサプライヤーを許可" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "異なるサプライヤの部品を持つ在庫品目をマージできるようにします。" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "不一致の状態を許可" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "異なるステータスコードを持つストックアイテムをマージすることができます。" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "少なくとも2つのストックアイテムを提供する必要があります。" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "変化なし" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "StockItem 主キー値" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "在庫がありません" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "在庫品目は既に在庫にあります" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "数量は負の数であってはなりません。" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "株式取引に関する注記" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "既存の在庫に統合します" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "可能なら、返品された商品を既存の在庫商品に統合してください" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "次のシリアル番号" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "以前のシリアル番号" @@ -9541,83 +9602,99 @@ msgstr "セールスオーダー" msgid "Return Orders" msgstr "返品注文" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "ユーザー名" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "名" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "ユーザーの名" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "姓" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "ユーザーの姓" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "ユーザーのメールアドレス" -#: users/serializers.py:309 -msgid "Staff" -msgstr "スタッフ" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "このユーザーにはスタッフ権限がありますか?" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "スーパーユーザー" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "このユーザーはスーパーユーザーですか?" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "このユーザーアカウントはアクティブですか" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "このフィールドを調整できるのはスーパーユーザーのみです。" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "パスワード" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "ユーザーのパスワード" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "警告を上書きします" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "パスワードルールに関する警告を無効にする" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "ユーザーを作成する権限がありません" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "アカウントが作成されました" -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "パスワードリセット機能を使ってログインしてください" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "InvenTreeへようこそ" diff --git a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po index 972dbc56e8..c1cef67db4 100644 --- a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Korean\n" "Language: ko_KR\n" @@ -19,37 +19,37 @@ msgstr "" #: InvenTree/api.py:365 msgid "API endpoint not found" -msgstr "" +msgstr "API 엔드포인트를 찾을 수 없습니다" #: InvenTree/api.py:438 msgid "List of items must be provided for bulk operation" -msgstr "" +msgstr "일괄 작업을 위해 항목 목록을 제공해야 합니다" #: InvenTree/api.py:445 msgid "Items must be provided as a list" -msgstr "" +msgstr "항목은 목록 형태로 제공되어야 합니다" #: InvenTree/api.py:453 msgid "Invalid items list provided" -msgstr "" +msgstr "잘못된 항목 목록이 제공되었습니다" #: InvenTree/api.py:458 msgid "All filter must only be used with true" -msgstr "" +msgstr "all 필터는 true와 함께만 사용할 수 있습니다" #: InvenTree/api.py:463 msgid "No items match the provided criteria" -msgstr "" +msgstr "제공된 조건과 일치하는 항목이 없습니다" #: InvenTree/api.py:487 msgid "No data provided" -msgstr "" +msgstr "데이터가 제공되지 않았습니다" #: InvenTree/api.py:503 msgid "This field must be unique." -msgstr "" +msgstr "이 필드는 고유해야 합니다." -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "이 모델을 볼 수 있는 권한이 없습니다." @@ -63,38 +63,38 @@ msgstr "이메일 주소 확인" #: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." -msgstr "" +msgstr "매번 동일한 이메일을 입력해야 합니다." #: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." -msgstr "" +msgstr "제공된 기본 이메일 주소가 유효하지 않습니다." #: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." -msgstr "" +msgstr "제공된 이메일 도메인이 승인되지 않았습니다." #: InvenTree/conversion.py:240 #, python-brace-format msgid "Invalid unit provided ({unit})" -msgstr "" +msgstr "잘못된 단위가 제공되었습니다 ({unit})" #: InvenTree/conversion.py:257 msgid "No value provided" -msgstr "" +msgstr "값이 제공되지 않았습니다" #: InvenTree/conversion.py:284 #, python-brace-format msgid "Could not convert {original} to {unit}" -msgstr "" +msgstr "{original}을(를) {unit}(으)로 변환할 수 없습니다" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" -msgstr "" +msgstr "잘못된 수량이 제공되었습니다" #: InvenTree/exceptions.py:136 msgid "Error details can be found in the admin panel" -msgstr "" +msgstr "오류 상세 내용은 관리자 패널에서 확인할 수 있습니다" #: InvenTree/fields.py:146 msgid "Enter date" @@ -102,168 +102,184 @@ msgstr "날짜 입력" #: InvenTree/fields.py:169 msgid "Invalid decimal value" -msgstr "" +msgstr "잘못된 소수 값" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "메모" #: InvenTree/format.py:166 #, python-brace-format msgid "Value '{name}' does not appear in pattern format" -msgstr "" +msgstr "값 '{name}'이(가) 패턴 형식에 없습니다" #: InvenTree/format.py:177 msgid "Provided value does not match required pattern: " -msgstr "" +msgstr "제공된 값이 요구되는 패턴과 일치하지 않습니다: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" -msgstr "" +msgstr "한 번에 1000개를 초과하여 직렬화할 수 없습니다" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" -msgstr "" +msgstr "시리얼 번호 문자열이 비어 있습니다" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" -msgstr "" +msgstr "중복된 시리얼" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" -msgstr "" +msgstr "잘못된 그룹: {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" -msgstr "" +msgstr "그룹 범위 {group}이(가) 허용된 수량({expected_quantity})을 초과합니다" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" -msgstr "" +msgstr "시리얼 번호를 찾을 수 없습니다" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" -msgstr "" +msgstr "고유 시리얼 번호 개수({n})는 수량({q})과 일치해야 합니다" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" -msgstr "" +msgstr "이 값에서 HTML 태그를 제거하세요" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" -msgstr "" +msgstr "데이터에 금지된 마크다운 내용이 포함되어 있습니다" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "잘못된 URL: 호스트명이 없습니다" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "잘못된 URL: 호스트명을 확인할 수 없습니다" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "URL이 사설 또는 예약된 IP 주소를 가리킵니다" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "리디렉션이 너무 많습니다" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "연결 오류" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" -msgstr "" +msgstr "서버가 잘못된 상태 코드를 반환했습니다" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" -msgstr "" +msgstr "예외가 발생했습니다" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" -msgstr "" +msgstr "서버가 잘못된 Content-Length 값을 반환했습니다" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "이미지 크기가 너무 큽니다!" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" -msgstr "" +msgstr "이미지 다운로드가 최대 크기를 초과했습니다" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" -msgstr "" +msgstr "원격 서버가 빈 응답을 반환했습니다" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" -msgstr "" +msgstr "제공된 URL은 유효한 이미지 파일이 아닙니다" #: InvenTree/magic_login.py:31 msgid "Log in to the app" -msgstr "" +msgstr "앱에 로그인" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "이메일" #: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." -msgstr "" +msgstr "다른 작업을 하기 전에 먼저 2단계 인증을 활성화해야 합니다." #: InvenTree/models.py:114 msgid "Error running plugin validation" -msgstr "" +msgstr "플러그인 유효성 검사 실행 중 오류가 발생했습니다" #: InvenTree/models.py:195 msgid "Metadata must be a python dict object" -msgstr "" +msgstr "메타데이터는 파이썬 dict 객체여야 합니다" #: InvenTree/models.py:201 msgid "Plugin Metadata" -msgstr "" +msgstr "플러그인 메타데이터" #: InvenTree/models.py:202 msgid "JSON metadata field, for use by external plugins" -msgstr "" +msgstr "외부 플러그인에서 사용하는 JSON 메타데이터 필드" #: InvenTree/models.py:385 msgid "Improperly formatted pattern" -msgstr "" +msgstr "패턴 형식이 올바르지 않습니다" #: InvenTree/models.py:392 msgid "Unknown format key specified" -msgstr "" +msgstr "알 수 없는 형식 키가 지정되었습니다" #: InvenTree/models.py:398 msgid "Missing required format key" -msgstr "" +msgstr "필수 형식 키가 누락되었습니다" #: InvenTree/models.py:409 msgid "Reference field cannot be empty" -msgstr "" +msgstr "참조(Reference) 필드는 비워둘 수 없습니다" #: InvenTree/models.py:417 msgid "Reference must match required pattern" -msgstr "" +msgstr "참조(Reference)는 요구되는 패턴과 일치해야 합니다" #: InvenTree/models.py:448 msgid "Reference number is too large" -msgstr "" +msgstr "참조 번호가 너무 큽니다" #: InvenTree/models.py:901 msgid "Invalid choice" -msgstr "" +msgstr "잘못된 선택입니다" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "이름" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,17 +289,17 @@ msgstr "설명" msgid "Description (optional)" msgstr "설명 (선택 사항)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" -msgstr "" +msgstr "경로" #: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" -msgstr "" +msgstr "같은 상위 항목 아래에는 중복된 이름이 있을 수 없습니다" #: InvenTree/models.py:1233 msgid "Markdown notes (optional)" -msgstr "" +msgstr "마크다운 메모 (선택 사항)" #: InvenTree/models.py:1264 msgid "Barcode Data" @@ -291,19 +307,19 @@ msgstr "바코드 데이터" #: InvenTree/models.py:1265 msgid "Third party barcode data" -msgstr "" +msgstr "서드파티 바코드 데이터" #: InvenTree/models.py:1271 msgid "Barcode Hash" -msgstr "" +msgstr "바코드 해시" #: InvenTree/models.py:1272 msgid "Unique hash of barcode data" -msgstr "" +msgstr "바코드 데이터의 고유 해시" #: InvenTree/models.py:1353 msgid "Existing barcode found" -msgstr "" +msgstr "기존 바코드를 찾았습니다" #: InvenTree/models.py:1453 msgid "Server Error" @@ -311,62 +327,62 @@ msgstr "서버 오류" #: InvenTree/models.py:1454 msgid "An error has been logged by the server." -msgstr "" +msgstr "서버에 오류가 기록되었습니다." #: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" -msgstr "" +msgstr "이미지" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" -msgstr "" +msgstr "유효한 숫자여야 합니다" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" -msgstr "" +msgstr "통화" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" -msgstr "" +msgstr "사용 가능한 옵션에서 통화를 선택하세요" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." -msgstr "" +msgstr "이 필드는 null일 수 없습니다." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "유효하지 않은 값" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" -msgstr "" +msgstr "원격 이미지" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" -msgstr "" +msgstr "원격 이미지 파일의 URL" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" -msgstr "" +msgstr "원격 URL에서 이미지 다운로드가 활성화되어 있지 않습니다" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" -msgstr "" +msgstr "원격 URL에서 이미지를 다운로드하지 못했습니다" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" -msgstr "" +msgstr "콘텐츠 타입 형식이 올바르지 않습니다" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" -msgstr "" +msgstr "콘텐츠 타입을 찾을 수 없습니다" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" -msgstr "" +msgstr "콘텐츠 타입이 필요한 믹스인 클래스와 일치하지 않습니다" #: InvenTree/setting/locales.py:20 msgid "Arabic" @@ -520,46 +536,46 @@ msgstr "중국어 (간체)" msgid "Chinese (Traditional)" msgstr "중국어 (번체)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" -msgstr "" +msgstr "업데이트 사용 가능" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" -msgstr "" +msgstr "InvenTree 업데이트가 있습니다" #: InvenTree/validators.py:28 msgid "Invalid physical unit" -msgstr "" +msgstr "잘못된 물리 단위" #: InvenTree/validators.py:34 msgid "Not a valid currency code" -msgstr "" +msgstr "유효한 통화 코드가 아닙니다" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" -msgstr "" +msgstr "주문 상태" #: build/api.py:81 build/models.py:277 msgid "Parent Build" -msgstr "" +msgstr "직상위 빌드" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" -msgstr "" +msgstr "변형(Variant) 포함" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,25 +585,25 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/email/part_event_notification.html:15 #: templates/email/stale_stock_notification.html:17 msgid "Part" -msgstr "" +msgstr "부품" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "분류" #: build/api.py:132 build/api.py:136 msgid "Ancestor Build" -msgstr "" +msgstr "상위 계층 빌드" #: build/api.py:153 order/api.py:132 msgid "Assigned to me" @@ -595,47 +611,47 @@ msgstr "나에게 할당 됨" #: build/api.py:168 msgid "Assigned To" -msgstr "" +msgstr "할당 대상" #: build/api.py:203 msgid "Created before" -msgstr "" +msgstr "생성일 이전" #: build/api.py:207 msgid "Created after" -msgstr "" +msgstr "생성일 이후" #: build/api.py:211 msgid "Has start date" -msgstr "" +msgstr "시작일 있음" #: build/api.py:219 msgid "Start date before" -msgstr "" +msgstr "시작일 이전" #: build/api.py:223 msgid "Start date after" -msgstr "" +msgstr "시작일 이후" #: build/api.py:227 msgid "Has target date" -msgstr "" +msgstr "목표일 있음" #: build/api.py:235 msgid "Target date before" -msgstr "" +msgstr "목표일 이전" #: build/api.py:239 msgid "Target date after" -msgstr "" +msgstr "목표일 이후" #: build/api.py:243 msgid "Completed before" -msgstr "" +msgstr "완료일 이전" #: build/api.py:247 msgid "Completed after" -msgstr "" +msgstr "완료일 이후" #: build/api.py:250 order/api.py:237 msgid "Min Date" @@ -647,364 +663,364 @@ msgstr "최대 날짜" #: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" -msgstr "" +msgstr "트리 제외" #: build/api.py:400 msgid "Build must be cancelled before it can be deleted" -msgstr "" +msgstr "빌드를 삭제하려면 먼저 취소해야 합니다" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "소모품" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "선택사항" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" -msgstr "" +msgstr "조립품" #: build/api.py:453 msgid "Tracked" -msgstr "" +msgstr "추적됨" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" -msgstr "" +msgstr "테스트 가능" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" -msgstr "" +msgstr "미결 주문" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" -msgstr "" +msgstr "할당됨" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" -msgstr "" +msgstr "소모됨" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" -msgstr "" +msgstr "사용 가능" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" -msgstr "" +msgstr "주문 중" #: build/api.py:671 msgid "Build not found" -msgstr "" +msgstr "빌드를 찾을 수 없습니다" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" -msgstr "" +msgstr "작업 지시서" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" -msgstr "" +msgstr "위치" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" -msgstr "" +msgstr "산출물" #: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." -msgstr "" +msgstr "산출물 재고 항목 ID로 필터링합니다. 설치되지 않은 빌드 항목을 찾으려면 'null'을 사용하세요." #: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" -msgstr "" +msgstr "작업 지시서" #: build/models.py:181 msgid "Assembly BOM has not been validated" -msgstr "" +msgstr "조립품 BOM이 검증되지 않았습니다" #: build/models.py:188 msgid "Build order cannot be created for an inactive part" -msgstr "" +msgstr "비활성 부품에 대해서는 작업 지시서를 생성할 수 없습니다" #: build/models.py:195 msgid "Build order cannot be created for an unlocked part" -msgstr "" +msgstr "잠금 해제된 부품에 대해서는 작업 지시서를 생성할 수 없습니다" #: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" -msgstr "" +msgstr "외부 이행은 구매 가능한 부품에 대해서만 가능합니다" #: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" -msgstr "" +msgstr "담당 사용자 또는 그룹을 지정해야 합니다" #: build/models.py:225 msgid "Build order part cannot be changed" -msgstr "" +msgstr "작업 지시서 부품은 변경할 수 없습니다" #: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" -msgstr "" +msgstr "목표일은 시작일 이후여야 합니다" #: build/models.py:258 msgid "Build Order Reference" -msgstr "" +msgstr "작업 지시서 참조번호" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 #: report/templates/report/inventree_sales_order_report.html:28 msgid "Reference" -msgstr "" +msgstr "참조" #: build/models.py:268 msgid "Brief description of the build (optional)" -msgstr "" +msgstr "빌드에 대한 간단한 설명 (선택 사항)" #: build/models.py:278 msgid "Build Order to which this build is allocated" -msgstr "" +msgstr "이 빌드가 할당된 작업 지시서" #: build/models.py:287 msgid "Select part to build" -msgstr "" +msgstr "빌드할 부품을 선택하세요" #: build/models.py:292 msgid "Sales Order Reference" -msgstr "" +msgstr "판매 주문 참조" #: build/models.py:297 msgid "Sales Order to which this build is allocated" -msgstr "" +msgstr "이 빌드가 할당된 판매 주문" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" -msgstr "" +msgstr "원본 위치" #: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" -msgstr "" +msgstr "이 빌드에 사용할 재고를 가져올 위치를 선택하세요 (비워두면 어떤 재고 위치에서든 가져옵니다)" #: build/models.py:314 msgid "External Build" -msgstr "" +msgstr "외주 생산" #: build/models.py:315 msgid "This build order is fulfilled externally" -msgstr "" +msgstr "이 작업 지시서는 외주로 생산됩니다" #: build/models.py:320 msgid "Destination Location" -msgstr "" +msgstr "대상 위치" #: build/models.py:325 msgid "Select location where the completed items will be stored" -msgstr "" +msgstr "완료된 항목이 보관될 위치를 선택하세요" #: build/models.py:329 msgid "Build Quantity" -msgstr "" +msgstr "빌드 수량" #: build/models.py:332 msgid "Number of stock items to build" -msgstr "" +msgstr "빌드할 재고 항목 수" #: build/models.py:336 msgid "Completed items" -msgstr "" +msgstr "완료된 항목" #: build/models.py:338 msgid "Number of stock items which have been completed" -msgstr "" +msgstr "완료된 재고 항목 수" #: build/models.py:342 msgid "Build Status" -msgstr "" +msgstr "빌드 상태" #: build/models.py:347 msgid "Build status code" -msgstr "" +msgstr "빌드 상태 코드" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" -msgstr "" +msgstr "배치 코드" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" -msgstr "" +msgstr "이 빌드 산출물의 배치 코드" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" -msgstr "" +msgstr "생성일" #: build/models.py:370 msgid "Build start date" -msgstr "" +msgstr "빌드 시작일" #: build/models.py:371 msgid "Scheduled start date for this build order" -msgstr "" +msgstr "이 작업 지시서의 예정 시작일" #: build/models.py:377 msgid "Target completion date" -msgstr "" +msgstr "목표 완료일" #: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." -msgstr "" +msgstr "빌드 완료 목표일. 이 날짜 이후에는 빌드가 지연으로 처리됩니다." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" -msgstr "" +msgstr "완료일" #: build/models.py:392 msgid "completed by" -msgstr "" +msgstr "완료자" #: build/models.py:401 msgid "Issued by" -msgstr "" +msgstr "발행자" #: build/models.py:402 msgid "User who issued this build order" -msgstr "" +msgstr "이 작업 지시서를 발행한 사용자" #: build/models.py:411 common/models.py:187 order/api.py:182 #: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" -msgstr "" +msgstr "담당" #: build/models.py:412 msgid "User or group responsible for this build order" -msgstr "" +msgstr "이 작업 지시서를 담당하는 사용자 또는 그룹" #: build/models.py:417 stock/models.py:1100 msgid "External Link" -msgstr "" +msgstr "외부 링크" #: build/models.py:419 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" -msgstr "" +msgstr "외부 URL로 연결" #: build/models.py:424 msgid "Build Priority" -msgstr "" +msgstr "빌드 우선순위" #: build/models.py:427 msgid "Priority of this build order" -msgstr "" +msgstr "이 빌드 주문의 우선순위" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" -msgstr "" +msgstr "프로젝트 코드" #: build/models.py:436 msgid "Project code for this build order" -msgstr "" +msgstr "이 빌드 주문의 프로젝트 코드" #: build/models.py:689 msgid "Cannot complete build order with open child builds" -msgstr "" +msgstr "진행 중인 하위 빌드가 있는 상태에서는 작업 지시서를 완료할 수 없습니다" #: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" -msgstr "" +msgstr "미완료 산출물이 있는 상태에서는 작업 지시서를 완료할 수 없습니다" #: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" -msgstr "" +msgstr "빌드 자재 할당 완료 처리를 위한 작업 실행에 실패했습니다" #: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" -msgstr "" +msgstr "작업 지시서 {build}이(가) 완료되었습니다" #: build/models.py:742 msgid "A build order has been completed" -msgstr "" +msgstr "작업 지시서가 완료되었습니다" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" -msgstr "" +msgstr "추적 가능한 부품에는 시리얼 번호를 제공해야 합니다" #: build/models.py:1016 build/models.py:1103 msgid "No build output specified" -msgstr "" +msgstr "생산 완제품이 지정되지 않았습니다" #: build/models.py:1019 msgid "Build output is already completed" -msgstr "" +msgstr "생산 완제품이 이미 완료되었습니다" #: build/models.py:1022 msgid "Build output does not match Build Order" -msgstr "" +msgstr "생산 완제품이 작업 지시서와 일치하지 않습니다" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" -msgstr "" +msgstr "수량은 0보다 커야 합니다" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" -msgstr "" +msgstr "수량은 산출물 수량보다 클 수 없습니다" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" -msgstr "" +msgstr "생산 완제품이 모든 필수 테스트를 통과하지 못했습니다" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" -msgstr "" +msgstr "생산 완제품 {serial}이(가) 모든 필수 테스트를 통과하지 못했습니다" #: build/models.py:1203 msgid "Allocated stock items are still in production" -msgstr "" +msgstr "할당된 재고 항목이 아직 생산 중입니다" #: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" -msgstr "" +msgstr "할당된 항목이 있는 빌드 산출물은 부분 완료할 수 없습니다" #: build/models.py:1740 msgid "Build Order Line Item" -msgstr "" +msgstr "소요 자재 품목" #: build/models.py:1765 msgid "Build object" -msgstr "" +msgstr "빌드 객체" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1024,6084 +1040,6112 @@ msgstr "수량" #: build/models.py:1778 msgid "Required quantity for build order" -msgstr "" +msgstr "작업 지시서에 필요한 수량" #: build/models.py:1787 msgid "Quantity of consumed stock" -msgstr "" +msgstr "소모된 재고 수량" #: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" -msgstr "" +msgstr "마스터 부품이 추적 가능으로 표시되어 있으므로, 빌드 항목은 생산 완제품을 지정해야 합니다" #: build/models.py:1951 msgid "Selected stock item does not match BOM line" -msgstr "" +msgstr "선택한 재고 항목이 BOM 라인과 일치하지 않습니다" #: build/models.py:1970 msgid "Allocated quantity must be greater than zero" -msgstr "" +msgstr "할당 수량은 0보다 커야 합니다" #: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" -msgstr "" +msgstr "시리얼이 있는 재고의 수량은 1이어야 합니다" #: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" -msgstr "" +msgstr "할당 수량({q})은 사용 가능한 재고 수량({a})을 초과할 수 없습니다" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" -msgstr "" +msgstr "재고 항목이 과다 할당되었습니다" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" -msgstr "" +msgstr "재고 항목" #: build/models.py:2093 msgid "Source stock item" -msgstr "" +msgstr "원본 재고 항목" #: build/models.py:2103 msgid "Stock quantity to allocate to build" -msgstr "" +msgstr "빌드에 할당할 재고 수량" #: build/models.py:2112 msgid "Install into" -msgstr "" +msgstr "설치 대상" #: build/models.py:2113 msgid "Destination stock item" -msgstr "" +msgstr "대상 재고 항목" #: build/serializers.py:115 msgid "Build Level" -msgstr "" +msgstr "빌드 레벨" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" -msgstr "" +msgstr "부품명" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" -msgstr "" +msgstr "빌드 산출물" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" -msgstr "" +msgstr "빌드 산출물이 상위 빌드와 일치하지 않습니다" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" -msgstr "" +msgstr "산출물 부품이 빌드 주문 부품과 일치하지 않습니다" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" -msgstr "" +msgstr "이 빌드 산출물은 이미 완료되었습니다" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" -msgstr "" +msgstr "이 빌드 산출물은 완전히 할당되지 않았습니다" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" -msgstr "" +msgstr "빌드 산출물 수량을 입력하세요" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" -msgstr "" +msgstr "추적 가능한 부품에는 정수 수량이 필요합니다" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" -msgstr "" +msgstr "BOM에 추적 가능한 부품이 포함되어 있으므로 정수 수량이 필요합니다" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "시리얼 번호 (일련번호)" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" -msgstr "" +msgstr "빌드 산출물의 시리얼 번호를 입력하세요" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" -msgstr "" +msgstr "빌드 산출물의 재고 위치" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" -msgstr "" +msgstr "시리얼 번호 자동 할당" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" -msgstr "" +msgstr "일치하는 시리얼 번호로 필요한 항목을 자동으로 할당합니다" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" -msgstr "" +msgstr "다음 시리얼 번호는 이미 존재하거나 유효하지 않습니다" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:486 -msgid "Stock location for scrapped outputs" -msgstr "" - -#: build/serializers.py:492 -msgid "Discard Allocations" -msgstr "" +msgstr "빌드 산출물 목록을 제공해야 합니다" #: build/serializers.py:493 +msgid "Stock location for scrapped outputs" +msgstr "폐기된 산출물의 재고 위치" + +#: build/serializers.py:499 +msgid "Discard Allocations" +msgstr "할당 폐기" + +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" -msgstr "" +msgstr "폐기된 산출물에 대한 모든 재고 할당을 폐기합니다" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" -msgstr "" +msgstr "빌드 산출물 폐기 사유" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" -msgstr "" +msgstr "완료된 빌드 산출물의 위치" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" -msgstr "" +msgstr "불완전한 할당 허용" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" -msgstr "" - -#: build/serializers.py:690 -msgid "Consume Allocated Stock" -msgstr "" - -#: build/serializers.py:691 -msgid "Consume any stock which has already been allocated to this build" -msgstr "" +msgstr "재고가 완전히 할당되지 않았더라도 산출물을 완료합니다" #: build/serializers.py:697 -msgid "Remove Incomplete Outputs" -msgstr "" +msgid "Consume Allocated Stock" +msgstr "할당된 재고 소모" #: build/serializers.py:698 +msgid "Consume any stock which has already been allocated to this build" +msgstr "이 빌드에 이미 할당된 모든 재고를 소모합니다" + +#: build/serializers.py:704 +msgid "Remove Incomplete Outputs" +msgstr "미완료 산출물 제거" + +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" -msgstr "" +msgstr "완료되지 않은 모든 빌드 산출물을 삭제합니다" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" -msgstr "" +msgstr "허용되지 않음" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" -msgstr "" +msgstr "이 빌드 주문에 의해 소모된 것으로 수락" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" -msgstr "" +msgstr "이 빌드 주문을 완료하기 전에 할당을 해제하세요" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" -msgstr "" +msgstr "과다 할당된 재고" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" -msgstr "" - -#: build/serializers.py:768 -msgid "Some stock items have been overallocated" -msgstr "" - -#: build/serializers.py:773 -msgid "Accept Unallocated" -msgstr "" +msgstr "빌드 주문에 추가로 할당된 재고 항목을 어떻게 처리하시겠습니까" #: build/serializers.py:775 +msgid "Some stock items have been overallocated" +msgstr "일부 재고 항목이 과다 할당되었습니다" + +#: build/serializers.py:780 +msgid "Accept Unallocated" +msgstr "미할당 수락" + +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" -msgstr "" - -#: build/serializers.py:786 -msgid "Required stock has not been fully allocated" -msgstr "" - -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 -msgid "Accept Incomplete" -msgstr "" +msgstr "재고 항목이 이 빌드 주문에 완전히 할당되지 않았음을 수락합니다" #: build/serializers.py:793 +msgid "Required stock has not been fully allocated" +msgstr "필요한 재고가 완전히 할당되지 않았습니다" + +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 +msgid "Accept Incomplete" +msgstr "불완전 수락" + +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" -msgstr "" +msgstr "필요한 개수의 빌드 산출물이 완료되지 않았음을 수락합니다" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" -msgstr "" +msgstr "필요한 빌드 수량이 완료되지 않았습니다" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" -msgstr "" +msgstr "작업 지시서에 진행 중인 하위 작업 지시서가 있습니다" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" -msgstr "" +msgstr "작업 지시서는 생산 상태여야 합니다" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" -msgstr "" +msgstr "작업 지시서에 미완료 산출물이 있습니다" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" -msgstr "" +msgstr "빌드 라인" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" -msgstr "" +msgstr "생산 완제품" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" -msgstr "" +msgstr "생산 완제품은 동일한 빌드를 가리켜야 합니다" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" -msgstr "" +msgstr "빌드 라인 항목" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" -msgstr "" +msgstr "bom_item.part는 빌드 주문과 동일한 부품을 가리켜야 합니다" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" -msgstr "" +msgstr "항목은 재고에 있어야 합니다" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" -msgstr "" +msgstr "사용 가능한 수량({q})을 초과했습니다" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" -msgstr "" +msgstr "추적 부품을 할당하려면 생산 완제품을 지정해야 합니다" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" -msgstr "" +msgstr "비추적 부품 할당에는 생산 완제품을 지정할 수 없습니다" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" -msgstr "" +msgstr "할당 항목을 제공해야 합니다" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" -msgstr "" - -#: build/serializers.py:1096 -msgid "Exclude Location" -msgstr "" - -#: build/serializers.py:1097 -msgid "Exclude stock items from this selected location" -msgstr "" - -#: build/serializers.py:1102 -msgid "Interchangeable Stock" -msgstr "" +msgstr "부품을 공급할 재고 위치 (비워두면 어떤 위치에서든 가져옵니다)" #: build/serializers.py:1103 -msgid "Stock items in multiple locations can be used interchangeably" -msgstr "" +msgid "Exclude Location" +msgstr "위치 제외" -#: build/serializers.py:1108 -msgid "Substitute Stock" -msgstr "" +#: build/serializers.py:1104 +msgid "Exclude stock items from this selected location" +msgstr "선택한 위치의 재고 항목을 제외합니다" #: build/serializers.py:1109 -msgid "Allow allocation of substitute parts" -msgstr "" +msgid "Interchangeable Stock" +msgstr "상호 대체 가능한 재고" -#: build/serializers.py:1114 -msgid "Optional Items" -msgstr "" +#: build/serializers.py:1110 +msgid "Stock items in multiple locations can be used interchangeably" +msgstr "여러 위치에 있는 재고 품목을 서로 대체하여 사용할 수 있습니다" #: build/serializers.py:1115 -msgid "Allocate optional BOM items to build order" -msgstr "" +msgid "Substitute Stock" +msgstr "대체 재고" + +#: build/serializers.py:1116 +msgid "Allow allocation of substitute parts" +msgstr "대체 부품 할당을 허용합니다" #: build/serializers.py:1121 -msgid "All Items" -msgstr "" +msgid "Optional Items" +msgstr "선택 항목" #: build/serializers.py:1122 +msgid "Allocate optional BOM items to build order" +msgstr "빌드 주문에 선택 BOM 항목을 할당합니다" + +#: build/serializers.py:1128 +msgid "All Items" +msgstr "모든 항목" + +#: build/serializers.py:1129 msgid "Untracked Items" -msgstr "" +msgstr "비추적 항목" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" -msgstr "" +msgstr "추적 항목" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" -msgstr "" +msgstr "항목 유형" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" -msgstr "" +msgstr "자동 할당할 항목 유형을 선택하세요" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1186 -msgid "BOM Part ID" -msgstr "" +msgstr "BOM 참조" #: build/serializers.py:1193 +msgid "BOM Part ID" +msgstr "BOM 부품 ID" + +#: build/serializers.py:1200 msgid "BOM Part Name" -msgstr "" +msgstr "BOM 부품명" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" -msgstr "" +msgstr "설치 대상" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" -msgstr "" +msgstr "빌드" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" -msgstr "" +msgstr "공급업체 부품" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" -msgstr "" +msgstr "할당 수량" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" -msgstr "" +msgstr "빌드 참조" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" -msgstr "" +msgstr "부품 카테고리 이름" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" -msgstr "" +msgstr "추적 가능" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" -msgstr "" +msgstr "상속됨" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" -msgstr "" +msgstr "변형(Variant) 허용" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" -msgstr "" +msgstr "BOM 항목" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" -msgstr "" +msgstr "생산 중" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" -msgstr "" +msgstr "빌드 예정" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" -msgstr "" +msgstr "외부 재고" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" -msgstr "" +msgstr "사용 가능 재고" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" -msgstr "" +msgstr "사용 가능 대체 재고" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" -msgstr "" +msgstr "사용 가능 변형(Variant) 재고" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" -msgstr "" +msgstr "소모 수량이 할당 수량을 초과합니다" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" -msgstr "" - -#: build/serializers.py:1783 -msgid "Build item must point to the correct build order" -msgstr "" - -#: build/serializers.py:1788 -msgid "Duplicate build item allocation" -msgstr "" +msgstr "재고 소모에 대한 선택 메모" #: build/serializers.py:1806 -msgid "Build line must point to the correct build order" -msgstr "" +msgid "Build item must point to the correct build order" +msgstr "빌드 항목은 올바른 빌드 주문을 가리켜야 합니다" #: build/serializers.py:1811 -msgid "Duplicate build line allocation" -msgstr "" +msgid "Duplicate build item allocation" +msgstr "빌드 항목 할당이 중복되었습니다" -#: build/serializers.py:1823 +#: build/serializers.py:1829 +msgid "Build line must point to the correct build order" +msgstr "빌드 라인은 올바른 빌드 주문을 가리켜야 합니다" + +#: build/serializers.py:1834 +msgid "Duplicate build line allocation" +msgstr "빌드 라인 할당이 중복되었습니다" + +#: build/serializers.py:1846 msgid "At least one item or line must be provided" -msgstr "" +msgstr "최소 하나의 항목 또는 라인을 제공해야 합니다" #: build/status_codes.py:11 generic/states/tests.py:21 #: generic/states/tests.py:131 order/status_codes.py:12 #: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102 msgid "Pending" -msgstr "" +msgstr "대기 중" #: build/status_codes.py:12 msgid "Production" -msgstr "" +msgstr "생산" #: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51 #: order/status_codes.py:81 msgid "On Hold" -msgstr "" +msgstr "보류" #: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53 #: order/status_codes.py:84 msgid "Cancelled" -msgstr "" +msgstr "취소됨" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" -msgstr "" +msgstr "완료" #: build/tasks.py:218 msgid "Stock required for build order" -msgstr "" +msgstr "빌드 주문에 재고가 필요합니다" #: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" -msgstr "" +msgstr "빌드 주문 {build}에 추가 재고가 필요합니다" #: build/tasks.py:252 msgid "Overdue Build Order" -msgstr "" +msgstr "기한 초과 빌드 주문" #: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" -msgstr "" +msgstr "빌드 주문 {bo}이(가) 기한을 초과했습니다" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" -msgstr "" +msgstr "링크 여부" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" -msgstr "" +msgstr "파일 여부" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" -msgstr "" +msgstr "사용자에게 이 첨부파일들을 삭제할 권한이 없습니다" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" -msgstr "" +msgstr "사용자에게 이 첨부파일을 삭제할 권한이 없습니다" #: common/currency.py:135 msgid "Invalid currency code" -msgstr "" +msgstr "유효하지 않은 통화 코드" #: common/currency.py:137 msgid "Duplicate currency code" -msgstr "" +msgstr "중복된 통화 코드" #: common/currency.py:142 msgid "No valid currency codes provided" -msgstr "" +msgstr "유효한 통화 코드가 제공되지 않았습니다" #: common/currency.py:159 msgid "No plugin" -msgstr "" +msgstr "플러그인 없음" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" -msgstr "" +msgstr "프로젝트 코드 라벨" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" -msgstr "" +msgstr "업데이트됨" #: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" -msgstr "" +msgstr "마지막 업데이트 타임스탬프" #: common/models.py:144 msgid "Update By" -msgstr "" +msgstr "업데이트 사용자" #: common/models.py:145 msgid "User who last updated this object" -msgstr "" +msgstr "이 객체를 마지막으로 업데이트한 사용자" #: common/models.py:172 msgid "Unique project code" -msgstr "" +msgstr "고유 프로젝트 코드" #: common/models.py:179 msgid "Project description" -msgstr "" +msgstr "프로젝트 설명" #: common/models.py:188 msgid "User or group responsible for this project" -msgstr "" +msgstr "이 프로젝트의 담당 사용자 또는 그룹" #: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" -msgstr "" +msgstr "설정 키" #: common/models.py:788 msgid "Settings value" -msgstr "" +msgstr "설정 값" #: common/models.py:843 msgid "Chosen value is not a valid option" -msgstr "" +msgstr "선택한 값이 유효한 옵션이 아닙니다" #: common/models.py:859 msgid "Value must be a boolean value" -msgstr "" +msgstr "값은 불리언(Boolean)이어야 합니다" #: common/models.py:867 msgid "Value must be an integer value" -msgstr "" +msgstr "값은 정수여야 합니다" #: common/models.py:875 msgid "Value must be a valid number" -msgstr "" +msgstr "값은 유효한 숫자여야 합니다" #: common/models.py:900 msgid "Value does not pass validation checks" -msgstr "" +msgstr "값이 유효성 검사 기준을 통과하지 못했습니다" #: common/models.py:922 msgid "Key string must be unique" -msgstr "" +msgstr "키 문자열은 고유해야 합니다" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" -msgstr "" +msgstr "사용자" #: common/models.py:1369 msgid "Price break quantity" -msgstr "" +msgstr "가격 구간 수량" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" -msgstr "" +msgstr "가격" #: common/models.py:1377 msgid "Unit price at specified quantity" -msgstr "" +msgstr "지정 수량에서의 단가" #: common/models.py:1428 common/models.py:1613 msgid "Endpoint" -msgstr "" +msgstr "엔드포인트" #: common/models.py:1429 msgid "Endpoint at which this webhook is received" -msgstr "" +msgstr "이 웹훅을 수신하는 엔드포인트" #: common/models.py:1439 msgid "Name for this webhook" -msgstr "" +msgstr "이 웹훅의 이름" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" -msgstr "" +msgstr "활성" #: common/models.py:1443 msgid "Is this webhook active" -msgstr "" +msgstr "이 웹훅이 활성 상태인가요" #: common/models.py:1459 users/models.py:172 msgid "Token" -msgstr "" +msgstr "토큰" #: common/models.py:1460 msgid "Token for access" -msgstr "" +msgstr "접근용 토큰" #: common/models.py:1468 msgid "Secret" -msgstr "" +msgstr "시크릿" #: common/models.py:1469 msgid "Shared secret for HMAC" -msgstr "" +msgstr "HMAC용 공유 시크릿" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" -msgstr "" +msgstr "메시지 ID" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" -msgstr "" +msgstr "이 메시지의 고유 식별자" #: common/models.py:1586 msgid "Host" -msgstr "" +msgstr "호스트" #: common/models.py:1587 msgid "Host from which this message was received" -msgstr "" +msgstr "이 메시지를 수신한 호스트" #: common/models.py:1595 msgid "Header" -msgstr "" +msgstr "헤더" #: common/models.py:1596 msgid "Header of this message" -msgstr "" +msgstr "이 메시지의 헤더" #: common/models.py:1603 msgid "Body" -msgstr "" +msgstr "본문" #: common/models.py:1604 msgid "Body of this message" -msgstr "" +msgstr "이 메시지의 본문" #: common/models.py:1614 msgid "Endpoint on which this message was received" -msgstr "" +msgstr "이 메시지를 수신한 엔드포인트" #: common/models.py:1619 msgid "Worked on" -msgstr "" +msgstr "처리됨" #: common/models.py:1620 msgid "Was the work on this message finished?" -msgstr "" +msgstr "이 메시지 처리가 완료되었나요?" #: common/models.py:1746 msgid "Id" -msgstr "" +msgstr "ID" #: common/models.py:1748 msgid "Title" -msgstr "" +msgstr "제목" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" -msgstr "" +msgstr "링크" #: common/models.py:1752 msgid "Published" -msgstr "" +msgstr "게시됨" #: common/models.py:1754 msgid "Author" -msgstr "" +msgstr "작성자" #: common/models.py:1756 msgid "Summary" -msgstr "" +msgstr "요약" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" -msgstr "" +msgstr "읽음" #: common/models.py:1759 msgid "Was this news item read?" -msgstr "" +msgstr "이 뉴스 항목을 읽었나요?" #: common/models.py:1776 msgid "Image file" -msgstr "" +msgstr "이미지 파일" #: common/models.py:1788 msgid "Target model type for this image" -msgstr "" +msgstr "이 이미지의 대상 모델 유형" #: common/models.py:1792 msgid "Target model ID for this image" -msgstr "" +msgstr "이 이미지의 대상 모델 ID" #: common/models.py:1814 msgid "Custom Unit" -msgstr "" +msgstr "사용자 정의 단위" #: common/models.py:1832 msgid "Unit symbol must be unique" -msgstr "" +msgstr "단위 기호는 고유해야 합니다" #: common/models.py:1847 msgid "Unit name must be a valid identifier" -msgstr "" +msgstr "단위 이름은 유효한 식별자여야 합니다" #: common/models.py:1866 msgid "Unit name" -msgstr "" +msgstr "단위 이름" #: common/models.py:1873 msgid "Symbol" -msgstr "" +msgstr "기호" #: common/models.py:1874 msgid "Optional unit symbol" -msgstr "" +msgstr "선택 단위 기호" #: common/models.py:1880 msgid "Definition" -msgstr "" +msgstr "정의" #: common/models.py:1881 msgid "Unit definition" -msgstr "" +msgstr "단위 정의" #: common/models.py:1941 common/models.py:2004 stock/models.py:3073 #: stock/serializers.py:258 msgid "Attachment" -msgstr "" +msgstr "첨부파일" #: common/models.py:1958 msgid "Missing file" -msgstr "" +msgstr "파일 누락" #: common/models.py:1959 msgid "Missing external link" -msgstr "" +msgstr "외부 링크 누락" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" -msgstr "" +msgstr "모델 유형" #: common/models.py:1997 msgid "Target model type for image" -msgstr "" +msgstr "이미지의 대상 모델 유형" #: common/models.py:2005 msgid "Select file to attach" -msgstr "" +msgstr "첨부할 파일을 선택하세요" #: common/models.py:2021 msgid "Comment" -msgstr "" +msgstr "댓글" #: common/models.py:2022 msgid "Attachment comment" -msgstr "" +msgstr "첨부파일 댓글" #: common/models.py:2038 msgid "Upload date" -msgstr "" +msgstr "업로드 날짜" #: common/models.py:2039 msgid "Date the file was uploaded" -msgstr "" +msgstr "파일이 업로드된 날짜" #: common/models.py:2043 msgid "File size" -msgstr "" +msgstr "파일 크기" #: common/models.py:2043 msgid "File size in bytes" -msgstr "" +msgstr "바이트 단위의 파일 크기" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" -msgstr "" +msgstr "첨부파일에 대해 유효하지 않은 모델 유형이 지정되었습니다" #: common/models.py:2102 msgid "Custom State" -msgstr "" +msgstr "사용자 정의 상태" #: common/models.py:2103 msgid "Custom States" -msgstr "" +msgstr "사용자 정의 상태" #: common/models.py:2108 msgid "Reference Status Set" -msgstr "" +msgstr "참조 상태 세트" #: common/models.py:2109 msgid "Status set that is extended with this custom state" -msgstr "" +msgstr "이 사용자 정의 상태로 확장되는 상태 세트" #: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" -msgstr "" +msgstr "논리 키" #: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" -msgstr "" +msgstr "업무 로직에서 이 사용자 정의 상태와 동일한 상태 논리 키" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" -msgstr "" +msgstr "값" #: common/models.py:2121 msgid "Numerical value that will be saved in the models database" -msgstr "" +msgstr "모델 데이터베이스에 저장될 숫자 값" #: common/models.py:2127 msgid "Name of the state" -msgstr "" +msgstr "상태 이름" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" -msgstr "" +msgstr "라벨" #: common/models.py:2137 msgid "Label that will be displayed in the frontend" -msgstr "" +msgstr "프론트엔드에 표시될 라벨" #: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" -msgstr "" +msgstr "색상" #: common/models.py:2145 msgid "Color that will be displayed in the frontend" -msgstr "" +msgstr "프론트엔드에 표시될 색상" #: common/models.py:2153 msgid "Model" -msgstr "" +msgstr "모델" #: common/models.py:2154 msgid "Model this state is associated with" -msgstr "" +msgstr "이 상태가 연결된 모델" #: common/models.py:2169 msgid "Model must be selected" -msgstr "" +msgstr "모델을 선택해야 합니다" #: common/models.py:2172 msgid "Key must be selected" -msgstr "" +msgstr "키를 선택해야 합니다" #: common/models.py:2175 msgid "Logical key must be selected" -msgstr "" +msgstr "논리 키를 선택해야 합니다" #: common/models.py:2179 msgid "Key must be different from logical key" -msgstr "" +msgstr "키는 논리 키와 달라야 합니다" #: common/models.py:2186 msgid "Valid reference status class must be provided" -msgstr "" +msgstr "유효한 참조 상태 클래스가 제공되어야 합니다" #: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" -msgstr "" +msgstr "키는 참조 상태의 논리 키들과 달라야 합니다" #: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" -msgstr "" +msgstr "논리 키는 참조 상태의 논리 키 목록에 포함되어야 합니다" #: common/models.py:2206 msgid "Name must be different from the names of the reference status" -msgstr "" +msgstr "이름은 참조 상태의 이름들과 달라야 합니다" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" -msgstr "" +msgstr "선택 목록" #: common/models.py:2247 msgid "Selection Lists" -msgstr "" +msgstr "선택 목록" #: common/models.py:2252 msgid "Name of the selection list" -msgstr "" +msgstr "선택 목록 이름" #: common/models.py:2259 msgid "Description of the selection list" -msgstr "" +msgstr "선택 목록 설명" #: common/models.py:2265 part/models.py:1287 msgid "Locked" -msgstr "" +msgstr "잠김" #: common/models.py:2266 msgid "Is this selection list locked?" -msgstr "" +msgstr "이 선택 목록이 잠겨 있나요?" #: common/models.py:2272 msgid "Can this selection list be used?" -msgstr "" +msgstr "이 선택 목록을 사용할 수 있나요?" #: common/models.py:2280 msgid "Source Plugin" -msgstr "" +msgstr "소스 플러그인" #: common/models.py:2281 msgid "Plugin which provides the selection list" -msgstr "" +msgstr "선택 목록을 제공하는 플러그인" #: common/models.py:2286 msgid "Source String" -msgstr "" +msgstr "소스 문자열" #: common/models.py:2287 msgid "Optional string identifying the source used for this list" -msgstr "" +msgstr "이 목록에 사용된 소스를 식별하는 선택 문자열" #: common/models.py:2296 msgid "Default Entry" -msgstr "" +msgstr "기본 항목" #: common/models.py:2297 msgid "Default entry for this selection list" -msgstr "" +msgstr "이 선택 목록의 기본 항목" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" -msgstr "" +msgstr "생성됨" #: common/models.py:2303 msgid "Date and time that the selection list was created" -msgstr "" +msgstr "선택 목록이 생성된 날짜 및 시간" #: common/models.py:2308 msgid "Last Updated" -msgstr "" +msgstr "마지막 업데이트" #: common/models.py:2309 msgid "Date and time that the selection list was last updated" -msgstr "" +msgstr "선택 목록이 마지막으로 업데이트된 날짜 및 시간" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" -msgstr "" - -#: common/models.py:2344 -msgid "Selection List Entries" -msgstr "" - -#: common/models.py:2354 -msgid "Selection list to which this entry belongs" -msgstr "" - -#: common/models.py:2360 -msgid "Value of the selection list entry" -msgstr "" - -#: common/models.py:2366 -msgid "Label for the selection list entry" -msgstr "" +msgstr "선택 목록 항목" #: common/models.py:2372 +msgid "Selection List Entries" +msgstr "선택 목록 항목" + +#: common/models.py:2382 +msgid "Selection list to which this entry belongs" +msgstr "이 항목이 속한 선택 목록" + +#: common/models.py:2388 +msgid "Value of the selection list entry" +msgstr "선택 목록 항목의 값" + +#: common/models.py:2394 +msgid "Label for the selection list entry" +msgstr "선택 목록 항목 라벨" + +#: common/models.py:2400 msgid "Description of the selection list entry" -msgstr "" +msgstr "선택 목록 항목 설명" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" -msgstr "" +msgstr "이 선택 목록 항목이 활성 상태인가요?" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" -msgstr "" +msgstr "매개변수 템플릿" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" -msgstr "" +msgstr "매개변수 템플릿" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" -msgstr "" +msgstr "체크박스 매개변수에는 단위를 지정할 수 없습니다" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" -msgstr "" +msgstr "체크박스 매개변수에는 선택지를 지정할 수 없습니다" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" -msgstr "" - -#: common/models.py:2493 -msgid "Parameter template name must be unique" -msgstr "" - -#: common/models.py:2515 -msgid "Target model type for this parameter template" -msgstr "" +msgstr "선택지는 고유해야 합니다" #: common/models.py:2521 -msgid "Parameter Name" -msgstr "" - -#: common/models.py:2527 part/models.py:1240 -msgid "Units" -msgstr "" - -#: common/models.py:2528 -msgid "Physical units for this parameter" -msgstr "" - -#: common/models.py:2536 -msgid "Parameter description" -msgstr "" - -#: common/models.py:2542 -msgid "Checkbox" -msgstr "" +msgid "Parameter template name must be unique" +msgstr "매개변수 템플릿 이름은 고유해야 합니다" #: common/models.py:2543 -msgid "Is this parameter a checkbox?" -msgstr "" - -#: common/models.py:2548 part/models.py:3754 -msgid "Choices" -msgstr "" +msgid "Target model type for this parameter template" +msgstr "이 매개변수 템플릿의 대상 모델 유형" #: common/models.py:2549 +msgid "Parameter Name" +msgstr "매개변수 이름" + +#: common/models.py:2555 part/models.py:1240 +msgid "Units" +msgstr "단위" + +#: common/models.py:2556 +msgid "Physical units for this parameter" +msgstr "이 매개변수의 물리 단위" + +#: common/models.py:2564 +msgid "Parameter description" +msgstr "매개변수 설명" + +#: common/models.py:2570 +msgid "Checkbox" +msgstr "체크박스" + +#: common/models.py:2571 +msgid "Is this parameter a checkbox?" +msgstr "이 매개변수는 체크박스인가요?" + +#: common/models.py:2576 part/models.py:3754 +msgid "Choices" +msgstr "선택지" + +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" -msgstr "" +msgstr "이 매개변수에 대한 유효한 선택지(쉼표로 구분)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" -msgstr "" +msgstr "이 매개변수의 선택 목록" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" -msgstr "" +msgstr "사용" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" -msgstr "" +msgstr "이 매개변수 템플릿을 사용하나요?" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" -msgstr "" +msgstr "매개변수" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" -msgstr "" +msgstr "매개변수" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" -msgstr "" +msgstr "매개변수 값에 대한 선택지가 올바르지 않습니다" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" -msgstr "" +msgstr "매개변수에 지정된 모델 유형이 올바르지 않습니다" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" -msgstr "" +msgstr "모델 ID" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" -msgstr "" +msgstr "이 매개변수의 대상 모델 ID" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" -msgstr "" +msgstr "템플릿" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" -msgstr "" +msgstr "매개변수 템플릿" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" -msgstr "" +msgstr "데이터" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" -msgstr "" +msgstr "매개변수 값" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" -msgstr "" +msgstr "메모" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" -msgstr "" - -#: common/models.py:2814 -msgid "Barcode Scan" -msgstr "" - -#: common/models.py:2819 -msgid "Barcode data" -msgstr "" - -#: common/models.py:2830 -msgid "User who scanned the barcode" -msgstr "" - -#: common/models.py:2835 importer/models.py:70 -msgid "Timestamp" -msgstr "" - -#: common/models.py:2836 -msgid "Date and time of the barcode scan" -msgstr "" +msgstr "선택적 메모 필드" #: common/models.py:2842 -msgid "URL endpoint which processed the barcode" -msgstr "" +msgid "Barcode Scan" +msgstr "바코드 스캔" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 -msgid "Context" -msgstr "" - -#: common/models.py:2850 -msgid "Context data for the barcode scan" -msgstr "" - -#: common/models.py:2857 -msgid "Response" -msgstr "" +#: common/models.py:2847 +msgid "Barcode data" +msgstr "바코드 데이터" #: common/models.py:2858 -msgid "Response data from the barcode scan" -msgstr "" +msgid "User who scanned the barcode" +msgstr "바코드를 스캔한 사용자" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2863 importer/models.py:70 +msgid "Timestamp" +msgstr "타임스탬프" + +#: common/models.py:2864 +msgid "Date and time of the barcode scan" +msgstr "바코드 스캔 날짜 및 시간" + +#: common/models.py:2870 +msgid "URL endpoint which processed the barcode" +msgstr "바코드를 처리한 URL 엔드포인트" + +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +msgid "Context" +msgstr "컨텍스트" + +#: common/models.py:2878 +msgid "Context data for the barcode scan" +msgstr "바코드 스캔의 컨텍스트 데이터" + +#: common/models.py:2885 +msgid "Response" +msgstr "응답" + +#: common/models.py:2886 +msgid "Response data from the barcode scan" +msgstr "바코드 스캔의 응답 데이터" + +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" -msgstr "" +msgstr "결과" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" -msgstr "" +msgstr "바코드 스캔이 성공했나요?" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" -msgstr "" +msgstr "오류가 발생했습니다" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." -msgstr "" - -#: common/models.py:3015 -msgid "Email Message" -msgstr "" - -#: common/models.py:3016 -msgid "Email Messages" -msgstr "" - -#: common/models.py:3023 -msgid "Announced" -msgstr "" - -#: common/models.py:3025 -msgid "Sent" -msgstr "" - -#: common/models.py:3026 -msgid "Failed" -msgstr "" - -#: common/models.py:3029 -msgid "Delivered" -msgstr "" - -#: common/models.py:3037 -msgid "Confirmed" -msgstr "" +msgstr "INVE-E8: 이메일 로그 삭제가 보호되어 있습니다. 삭제를 허용하려면 INVENTREE_PROTECT_EMAIL_LOG를 False로 설정하세요." #: common/models.py:3043 -msgid "Inbound" -msgstr "" +msgid "Email Message" +msgstr "이메일 메시지" #: common/models.py:3044 -msgid "Outbound" -msgstr "" - -#: common/models.py:3049 -msgid "No Reply" -msgstr "" - -#: common/models.py:3050 -msgid "Track Delivery" -msgstr "" +msgid "Email Messages" +msgstr "이메일 메시지" #: common/models.py:3051 -msgid "Track Read" -msgstr "" +msgid "Announced" +msgstr "공지됨" -#: common/models.py:3052 -msgid "Track Click" -msgstr "" +#: common/models.py:3053 +msgid "Sent" +msgstr "전송됨" -#: common/models.py:3055 common/models.py:3158 -msgid "Global ID" -msgstr "" +#: common/models.py:3054 +msgid "Failed" +msgstr "실패" -#: common/models.py:3068 -msgid "Identifier for this message (might be supplied by external system)" -msgstr "" +#: common/models.py:3057 +msgid "Delivered" +msgstr "전달됨" -#: common/models.py:3075 -msgid "Thread ID" -msgstr "" +#: common/models.py:3065 +msgid "Confirmed" +msgstr "확인됨" + +#: common/models.py:3071 +msgid "Inbound" +msgstr "수신" + +#: common/models.py:3072 +msgid "Outbound" +msgstr "발신" #: common/models.py:3077 -msgid "Identifier for this message thread (might be supplied by external system)" -msgstr "" +msgid "No Reply" +msgstr "회신 없음" -#: common/models.py:3086 -msgid "Thread" -msgstr "" +#: common/models.py:3078 +msgid "Track Delivery" +msgstr "전달 추적" -#: common/models.py:3087 -msgid "Linked thread for this message" -msgstr "" +#: common/models.py:3079 +msgid "Track Read" +msgstr "읽음 추적" + +#: common/models.py:3080 +msgid "Track Click" +msgstr "클릭 추적" + +#: common/models.py:3083 common/models.py:3186 +msgid "Global ID" +msgstr "전역 ID" + +#: common/models.py:3096 +msgid "Identifier for this message (might be supplied by external system)" +msgstr "이 메시지의 식별자(외부 시스템에서 제공될 수 있음)" #: common/models.py:3103 +msgid "Thread ID" +msgstr "스레드 ID" + +#: common/models.py:3105 +msgid "Identifier for this message thread (might be supplied by external system)" +msgstr "이 메시지 스레드의 식별자(외부 시스템에서 제공될 수 있음)" + +#: common/models.py:3114 +msgid "Thread" +msgstr "스레드" + +#: common/models.py:3115 +msgid "Linked thread for this message" +msgstr "이 메시지에 연결된 스레드" + +#: common/models.py:3131 msgid "Priority" -msgstr "" +msgstr "우선순위" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" -msgstr "" +msgstr "이메일 스레드" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" -msgstr "" +msgstr "이메일 스레드" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" -msgstr "" +msgstr "키" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" -msgstr "" +msgstr "이 스레드의 고유 키(스레드 식별에 사용)" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" -msgstr "" +msgstr "이 스레드의 고유 식별자" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" -msgstr "" +msgstr "내부 시작" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" -msgstr "" +msgstr "이 스레드는 내부에서 시작되었나요?" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" -msgstr "" +msgstr "스레드가 생성된 날짜 및 시간" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" -msgstr "" +msgstr "스레드가 마지막으로 업데이트된 날짜 및 시간" #: common/notifications.py:57 #, python-brace-format msgid "New {verbose_name}" -msgstr "" +msgstr "새 {verbose_name}" #: common/notifications.py:59 msgid "A new order has been created and assigned to you" -msgstr "" +msgstr "새 주문이 생성되어 귀하에게 할당되었습니다" #: common/notifications.py:65 #, python-brace-format msgid "{verbose_name} canceled" -msgstr "" +msgstr "{verbose_name} 취소됨" #: common/notifications.py:67 msgid "A order that is assigned to you was canceled" -msgstr "" +msgstr "귀하에게 할당된 주문이 취소되었습니다" #: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" -msgstr "" +msgstr "항목 수령됨" #: common/notifications.py:75 msgid "Items have been received against a purchase order" -msgstr "" +msgstr "구매 주문에 대한 항목을 수령했습니다" #: common/notifications.py:82 msgid "Items have been received against a return order" -msgstr "" +msgstr "반품 주문에 대한 항목을 수령했습니다" #: common/serializers.py:125 msgid "Indicates if changing this setting requires confirmation" -msgstr "" +msgstr "이 설정 변경에 확인이 필요한지 여부를 나타냅니다" #: common/serializers.py:139 msgid "This setting requires confirmation before changing. Please confirm the change." -msgstr "" +msgstr "이 설정은 변경 전에 확인이 필요합니다. 변경을 확인해 주세요." #: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" -msgstr "" +msgstr "이 설정이 환경 변수로 재정의되었는지 여부를 나타냅니다" #: common/serializers.py:174 msgid "Override" -msgstr "" +msgstr "재정의" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" -msgstr "" +msgstr "실행 중" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" -msgstr "" +msgstr "대기 중인 작업" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" -msgstr "" +msgstr "예약된 작업" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" -msgstr "" +msgstr "실패한 작업" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" -msgstr "" +msgstr "작업 ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" -msgstr "" +msgstr "고유 작업 ID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" -msgstr "" +msgstr "잠금" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" -msgstr "" +msgstr "잠금 시간" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" -msgstr "" +msgstr "작업 이름" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" -msgstr "" +msgstr "함수" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" -msgstr "" +msgstr "함수 이름" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" -msgstr "" +msgstr "인수" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" -msgstr "" +msgstr "작업 인수" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" -msgstr "" +msgstr "키워드 인수" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" -msgstr "" +msgstr "작업 키워드 인수" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" -msgstr "" +msgstr "파일명" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" -msgstr "" +msgstr "모델 유형" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" -msgstr "" +msgstr "이 모델의 첨부파일을 생성하거나 편집할 권한이 없습니다" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" -msgstr "" +msgstr "이 모델의 매개변수를 생성하거나 편집할 권한이 없습니다" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" -msgstr "" +msgstr "선택 목록이 잠겨 있습니다" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" -msgstr "" +msgstr "그룹 없음" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" -msgstr "" - -#: common/setting/system.py:186 -msgid "Restart required" -msgstr "" +msgstr "사이트 URL이 구성에 의해 잠겨 있습니다" #: common/setting/system.py:187 -msgid "A setting has been changed which requires a server restart" -msgstr "" +msgid "Restart required" +msgstr "재시작 필요" -#: common/setting/system.py:193 -msgid "Pending migrations" -msgstr "" +#: common/setting/system.py:188 +msgid "A setting has been changed which requires a server restart" +msgstr "서버 재시작이 필요한 설정이 변경되었습니다" #: common/setting/system.py:194 -msgid "Number of pending database migrations" -msgstr "" +msgid "Pending migrations" +msgstr "대기 중인 마이그레이션" -#: common/setting/system.py:199 -msgid "Active warning codes" -msgstr "" +#: common/setting/system.py:195 +msgid "Number of pending database migrations" +msgstr "대기 중인 데이터베이스 마이그레이션 수" #: common/setting/system.py:200 -msgid "A dict of active warning codes" -msgstr "" +msgid "Active warning codes" +msgstr "활성 경고 코드" -#: common/setting/system.py:206 -msgid "Instance ID" -msgstr "" +#: common/setting/system.py:201 +msgid "A dict of active warning codes" +msgstr "활성 경고 코드의 딕셔너리" #: common/setting/system.py:207 +msgid "Instance ID" +msgstr "인스턴스 ID" + +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" -msgstr "" +msgstr "이 InvenTree 인스턴스의 고유 식별자" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" -msgstr "" +msgstr "ID 알림" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" -msgstr "" +msgstr "서버 상태 정보(인증 없음)에 서버 인스턴스 ID를 알립니다" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" -msgstr "" +msgstr "서버 인스턴스 이름" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" -msgstr "" - -#: common/setting/system.py:226 -msgid "Use instance name" -msgstr "" +msgstr "서버 인스턴스를 설명하는 문자열" #: common/setting/system.py:227 -msgid "Use the instance name in the title-bar" -msgstr "" +msgid "Use instance name" +msgstr "인스턴스 이름 사용" -#: common/setting/system.py:232 -msgid "Restrict showing `about`" -msgstr "" +#: common/setting/system.py:228 +msgid "Use the instance name in the title-bar" +msgstr "제목 표시줄에 인스턴스 이름을 사용합니다" #: common/setting/system.py:233 -msgid "Show the `about` modal only to superusers" -msgstr "" +msgid "Restrict showing `about`" +msgstr "`about` 표시 제한" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 -msgid "Company name" -msgstr "" +#: common/setting/system.py:234 +msgid "Show the `about` modal only to superusers" +msgstr "`about` 모달을 슈퍼유저에게만 표시합니다" #: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "슈퍼유저 배너 표시" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "슈퍼유저로 로그인했을 때 UI에 경고 배너를 표시합니다" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "관리자 배너 표시" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "관리자로 로그인했을 때 UI에 경고 배너를 표시합니다" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 +msgid "Company name" +msgstr "회사명" + +#: common/setting/system.py:252 msgid "Internal company name" -msgstr "" +msgstr "내부 회사명" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" -msgstr "" - -#: common/setting/system.py:244 -msgid "Base URL for server instance" -msgstr "" - -#: common/setting/system.py:250 -msgid "Default Currency" -msgstr "" - -#: common/setting/system.py:251 -msgid "Select base currency for pricing calculations" -msgstr "" +msgstr "기본 URL" #: common/setting/system.py:257 -msgid "Supported Currencies" -msgstr "" +msgid "Base URL for server instance" +msgstr "서버 인스턴스의 기본 URL" -#: common/setting/system.py:258 -msgid "List of supported currency codes" -msgstr "" +#: common/setting/system.py:263 +msgid "Default Currency" +msgstr "기본 통화" #: common/setting/system.py:264 -msgid "Currency Update Interval" -msgstr "" +msgid "Select base currency for pricing calculations" +msgstr "가격 계산에 사용할 기준 통화를 선택합니다" -#: common/setting/system.py:265 -msgid "How often to update exchange rates (set to zero to disable)" -msgstr "" - -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 -msgid "days" -msgstr "" +#: common/setting/system.py:270 +msgid "Supported Currencies" +msgstr "지원 통화" #: common/setting/system.py:271 -msgid "Currency Update Plugin" -msgstr "" - -#: common/setting/system.py:272 -msgid "Currency update plugin to use" -msgstr "" +msgid "List of supported currency codes" +msgstr "지원하는 통화 코드 목록" #: common/setting/system.py:277 -msgid "Download from URL" -msgstr "" +msgid "Currency Update Interval" +msgstr "환율 업데이트 간격" #: common/setting/system.py:278 -msgid "Allow download of remote images and files from external URL" -msgstr "" +msgid "How often to update exchange rates (set to zero to disable)" +msgstr "환율을 업데이트하는 주기(0으로 설정하면 비활성화)" -#: common/setting/system.py:283 -msgid "Download Size Limit" -msgstr "" +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 +msgid "days" +msgstr "일" #: common/setting/system.py:284 -msgid "Maximum allowable download size for remote image" -msgstr "" +msgid "Currency Update Plugin" +msgstr "환율 업데이트 플러그인" + +#: common/setting/system.py:285 +msgid "Currency update plugin to use" +msgstr "사용할 환율 업데이트 플러그인" #: common/setting/system.py:290 -msgid "User-agent used to download from URL" -msgstr "" +msgid "Download from URL" +msgstr "URL에서 다운로드" -#: common/setting/system.py:292 -msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" -msgstr "" +#: common/setting/system.py:291 +msgid "Allow download of remote images and files from external URL" +msgstr "외부 URL에서 원격 이미지 및 파일 다운로드를 허용합니다" + +#: common/setting/system.py:296 +msgid "Download Size Limit" +msgstr "다운로드 크기 제한" #: common/setting/system.py:297 -msgid "Strict URL Validation" -msgstr "" - -#: common/setting/system.py:298 -msgid "Require schema specification when validating URLs" -msgstr "" +msgid "Maximum allowable download size for remote image" +msgstr "원격 이미지의 최대 허용 다운로드 크기" #: common/setting/system.py:303 -msgid "Update Check Interval" -msgstr "" +msgid "User-agent used to download from URL" +msgstr "URL 다운로드에 사용할 User-Agent" -#: common/setting/system.py:304 -msgid "How often to check for updates (set to zero to disable)" -msgstr "" +#: common/setting/system.py:305 +msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" +msgstr "외부 URL에서 이미지 및 파일 다운로드에 사용되는 User-Agent를 재정의할 수 있습니다(비워두면 기본값)" #: common/setting/system.py:310 -msgid "Automatic Backup" -msgstr "" +msgid "Strict URL Validation" +msgstr "엄격한 URL 검증" #: common/setting/system.py:311 -msgid "Enable automatic backup of database and media files" -msgstr "" +msgid "Require schema specification when validating URLs" +msgstr "URL 검증 시 스키마 지정을 요구합니다" #: common/setting/system.py:316 -msgid "Auto Backup Interval" -msgstr "" +msgid "Update Check Interval" +msgstr "업데이트 확인 간격" #: common/setting/system.py:317 -msgid "Specify number of days between automated backup events" -msgstr "" +msgid "How often to check for updates (set to zero to disable)" +msgstr "업데이트를 확인하는 주기(0으로 설정하면 비활성화)" #: common/setting/system.py:323 +msgid "Automatic Backup" +msgstr "자동 백업" + +#: common/setting/system.py:324 +msgid "Enable automatic backup of database and media files" +msgstr "데이터베이스 및 미디어 파일의 자동 백업을 활성화합니다" + +#: common/setting/system.py:329 +msgid "Auto Backup Interval" +msgstr "자동 백업 간격" + +#: common/setting/system.py:330 +msgid "Specify number of days between automated backup events" +msgstr "자동 백업 이벤트 사이의 일 수를 지정합니다" + +#: common/setting/system.py:336 msgid "Task Deletion Interval" -msgstr "" +msgstr "작업 삭제 간격" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" -msgstr "" +msgstr "백그라운드 작업 결과는 지정한 일 수 이후 삭제됩니다" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" -msgstr "" +msgstr "오류 로그 삭제 간격" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" -msgstr "" +msgstr "오류 로그는 지정한 일 수 이후 삭제됩니다" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" -msgstr "" +msgstr "알림 삭제 간격" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" -msgstr "" +msgstr "사용자 알림은 지정한 일 수 이후 삭제됩니다" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" -msgstr "" - -#: common/setting/system.py:350 -msgid "Email messages will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:357 -msgid "Protect Email Log" -msgstr "" - -#: common/setting/system.py:358 -msgid "Prevent deletion of email log entries" -msgstr "" +msgstr "이메일 삭제 간격" #: common/setting/system.py:363 -msgid "Barcode Support" -msgstr "" - -#: common/setting/system.py:364 -msgid "Enable barcode scanner support in the web interface" -msgstr "" - -#: common/setting/system.py:369 -msgid "Store Barcode Results" -msgstr "" +msgid "Email messages will be deleted after specified number of days" +msgstr "이메일 메시지는 지정한 일 수 이후 삭제됩니다" #: common/setting/system.py:370 -msgid "Store barcode scan results in the database" -msgstr "" +msgid "Protect Email Log" +msgstr "이메일 로그 보호" -#: common/setting/system.py:375 -msgid "Barcode Scans Maximum Count" -msgstr "" +#: common/setting/system.py:371 +msgid "Prevent deletion of email log entries" +msgstr "이메일 로그 항목 삭제를 방지합니다" #: common/setting/system.py:376 -msgid "Maximum number of barcode scan results to store" -msgstr "" +msgid "Barcode Support" +msgstr "바코드 지원" -#: common/setting/system.py:381 -msgid "Barcode Input Delay" -msgstr "" +#: common/setting/system.py:377 +msgid "Enable barcode scanner support in the web interface" +msgstr "웹 인터페이스에서 바코드 스캐너 지원을 활성화합니다" #: common/setting/system.py:382 -msgid "Barcode input processing delay time" -msgstr "" +msgid "Store Barcode Results" +msgstr "바코드 결과 저장" + +#: common/setting/system.py:383 +msgid "Store barcode scan results in the database" +msgstr "바코드 스캔 결과를 데이터베이스에 저장합니다" #: common/setting/system.py:388 -msgid "Barcode Webcam Support" -msgstr "" +msgid "Barcode Scans Maximum Count" +msgstr "바코드 스캔 최대 개수" #: common/setting/system.py:389 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" +msgid "Maximum number of barcode scan results to store" +msgstr "저장할 바코드 스캔 결과의 최대 개수" #: common/setting/system.py:394 -msgid "Barcode Show Data" -msgstr "" +msgid "Barcode Input Delay" +msgstr "바코드 입력 지연" #: common/setting/system.py:395 -msgid "Display barcode data in browser as text" -msgstr "" - -#: common/setting/system.py:400 -msgid "Barcode Generation Plugin" -msgstr "" +msgid "Barcode input processing delay time" +msgstr "바코드 입력 처리 지연 시간" #: common/setting/system.py:401 -msgid "Plugin to use for internal barcode data generation" -msgstr "" +msgid "Barcode Webcam Support" +msgstr "바코드 웹캠 지원" -#: common/setting/system.py:406 -msgid "Part Revisions" -msgstr "" +#: common/setting/system.py:402 +msgid "Allow barcode scanning via webcam in browser" +msgstr "브라우저에서 웹캠을 통한 바코드 스캔을 허용합니다" #: common/setting/system.py:407 -msgid "Enable revision field for Part" -msgstr "" +msgid "Barcode Show Data" +msgstr "바코드 데이터 표시" -#: common/setting/system.py:412 -msgid "Assembly Revision Only" -msgstr "" +#: common/setting/system.py:408 +msgid "Display barcode data in browser as text" +msgstr "브라우저에 바코드 데이터를 텍스트로 표시합니다" #: common/setting/system.py:413 -msgid "Only allow revisions for assembly parts" -msgstr "" +msgid "Barcode Generation Plugin" +msgstr "바코드 생성 플러그인" -#: common/setting/system.py:418 -msgid "Allow Deletion from Assembly" -msgstr "" +#: common/setting/system.py:414 +msgid "Plugin to use for internal barcode data generation" +msgstr "내부 바코드 데이터 생성에 사용할 플러그인" #: common/setting/system.py:419 -msgid "Allow deletion of parts which are used in an assembly" -msgstr "" +msgid "Part Revisions" +msgstr "부품 리비전" -#: common/setting/system.py:424 -msgid "IPN Regex" -msgstr "" +#: common/setting/system.py:420 +msgid "Enable revision field for Part" +msgstr "부품에 리비전 필드를 활성화합니다" #: common/setting/system.py:425 +msgid "Assembly Revision Only" +msgstr "조립품 리비전만" + +#: common/setting/system.py:426 +msgid "Only allow revisions for assembly parts" +msgstr "조립 부품에만 리비전을 허용합니다" + +#: common/setting/system.py:431 +msgid "Allow Deletion from Assembly" +msgstr "조립품에서 삭제 허용" + +#: common/setting/system.py:432 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "조립품에 사용되는 부품의 삭제를 허용합니다" + +#: common/setting/system.py:437 +msgid "IPN Regex" +msgstr "IPN 정규식" + +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/setting/system.py:428 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/setting/system.py:429 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/setting/system.py:434 -msgid "Allow Editing IPN" -msgstr "" - -#: common/setting/system.py:435 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/setting/system.py:440 -msgid "Copy Part BOM Data" -msgstr "" +msgstr "부품 IPN과 일치시키기 위한 정규식 패턴" #: common/setting/system.py:441 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" +msgid "Allow Duplicate IPN" +msgstr "IPN 중복 허용" -#: common/setting/system.py:446 -msgid "Copy Part Parameter Data" -msgstr "" +#: common/setting/system.py:442 +msgid "Allow multiple parts to share the same IPN" +msgstr "여러 부품이 동일한 IPN을 공유하도록 허용합니다" #: common/setting/system.py:447 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" +msgid "Allow Editing IPN" +msgstr "IPN 편집 허용" -#: common/setting/system.py:452 -msgid "Copy Part Test Data" -msgstr "" +#: common/setting/system.py:448 +msgid "Allow changing the IPN value while editing a part" +msgstr "부품 편집 중 IPN 값 변경을 허용합니다" #: common/setting/system.py:453 -msgid "Copy test data by default when duplicating a part" -msgstr "" +msgid "Copy Part BOM Data" +msgstr "부품 BOM 데이터 복사" -#: common/setting/system.py:458 -msgid "Copy Category Parameter Templates" -msgstr "" +#: common/setting/system.py:454 +msgid "Copy BOM data by default when duplicating a part" +msgstr "부품을 복제할 때 기본으로 BOM 데이터를 복사합니다" #: common/setting/system.py:459 -msgid "Copy category parameter templates when creating a part" -msgstr "" +msgid "Copy Part Parameter Data" +msgstr "부품 매개변수 데이터 복사" + +#: common/setting/system.py:460 +msgid "Copy parameter data by default when duplicating a part" +msgstr "부품을 복제할 때 기본으로 매개변수 데이터를 복사합니다" #: common/setting/system.py:465 -msgid "Parts are templates by default" -msgstr "" +msgid "Copy Part Test Data" +msgstr "부품 테스트 데이터 복사" + +#: common/setting/system.py:466 +msgid "Copy test data by default when duplicating a part" +msgstr "부품을 복제할 때 기본으로 테스트 데이터를 복사합니다" #: common/setting/system.py:471 +msgid "Copy Category Parameter Templates" +msgstr "카테고리 매개변수 템플릿 복사" + +#: common/setting/system.py:472 +msgid "Copy category parameter templates when creating a part" +msgstr "부품을 생성할 때 카테고리 매개변수 템플릿을 복사합니다" + +#: common/setting/system.py:478 +msgid "Parts are templates by default" +msgstr "부품은 기본적으로 템플릿입니다" + +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" -msgstr "" +msgstr "부품은 기본적으로 다른 구성요소로 조립할 수 있습니다" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" -msgstr "" +msgstr "구성요소" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" -msgstr "" +msgstr "부품은 기본적으로 하위 구성요소로 사용할 수 있습니다" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" -msgstr "" +msgstr "구매 가능" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" -msgstr "" +msgstr "부품은 기본적으로 구매 가능합니다" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" -msgstr "" +msgstr "판매 가능" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" -msgstr "" +msgstr "부품은 기본적으로 판매 가능합니다" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" -msgstr "" +msgstr "부품은 기본적으로 추적 가능합니다" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" -msgstr "" +msgstr "가상" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" -msgstr "" +msgstr "부품은 기본적으로 가상입니다" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" -msgstr "" - -#: common/setting/system.py:507 -msgid "Display related parts for a part" -msgstr "" - -#: common/setting/system.py:512 -msgid "Initial Stock Data" -msgstr "" - -#: common/setting/system.py:513 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/setting/system.py:518 -msgid "Initial Supplier Data" -msgstr "" +msgstr "관련 부품 표시" #: common/setting/system.py:520 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" +msgid "Display related parts for a part" +msgstr "부품에 대한 관련 부품을 표시합니다" + +#: common/setting/system.py:525 +msgid "Initial Stock Data" +msgstr "초기 재고 데이터" #: common/setting/system.py:526 -msgid "Part Name Display Format" -msgstr "" +msgid "Allow creation of initial stock when adding a new part" +msgstr "새 부품 추가 시 초기 재고 생성을 허용합니다" -#: common/setting/system.py:527 -msgid "Format to display the part name" -msgstr "" +#: common/setting/system.py:531 +msgid "Initial Supplier Data" +msgstr "초기 공급업체 데이터" #: common/setting/system.py:533 -msgid "Part Category Default Icon" -msgstr "" - -#: common/setting/system.py:534 -msgid "Part category default icon (empty means no icon)" -msgstr "" +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "새 부품 추가 시 초기 공급업체 데이터 생성을 허용합니다" #: common/setting/system.py:539 -msgid "Minimum Pricing Decimal Places" -msgstr "" +msgid "Part Name Display Format" +msgstr "부품명 표시 형식" -#: common/setting/system.py:541 -msgid "Minimum number of decimal places to display when rendering pricing data" -msgstr "" +#: common/setting/system.py:540 +msgid "Format to display the part name" +msgstr "부품명을 표시하는 형식" + +#: common/setting/system.py:546 +msgid "Part Category Default Icon" +msgstr "부품 카테고리 기본 아이콘" + +#: common/setting/system.py:547 +msgid "Part category default icon (empty means no icon)" +msgstr "부품 카테고리 기본 아이콘(비워두면 아이콘 없음)" #: common/setting/system.py:552 -msgid "Maximum Pricing Decimal Places" -msgstr "" +msgid "Minimum Pricing Decimal Places" +msgstr "가격 최소 소수 자릿수" #: common/setting/system.py:554 -msgid "Maximum number of decimal places to display when rendering pricing data" -msgstr "" +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "가격 데이터를 표시할 때 최소 소수 자릿수" #: common/setting/system.py:565 -msgid "Use Supplier Pricing" -msgstr "" +msgid "Maximum Pricing Decimal Places" +msgstr "가격 최대 소수 자릿수" #: common/setting/system.py:567 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "가격 데이터를 표시할 때 최대 소수 자릿수" + +#: common/setting/system.py:578 +msgid "Use Supplier Pricing" +msgstr "공급업체 가격 사용" + +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" +msgstr "전체 가격 계산에 공급업체 수량별 가격을 포함합니다" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" -msgstr "" +msgstr "구매 이력 우선" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" +msgstr "과거 구매 주문 가격이 공급업체 수량별 가격보다 우선합니다" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" -msgstr "" +msgstr "재고 항목 가격 사용" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" +msgstr "가격 계산에 수동으로 입력한 재고 데이터의 가격을 사용합니다" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" -msgstr "" - -#: common/setting/system.py:591 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/setting/system.py:598 -msgid "Use Variant Pricing" -msgstr "" - -#: common/setting/system.py:599 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" +msgstr "재고 항목 가격 유효 기간" #: common/setting/system.py:604 -msgid "Active Variants Only" -msgstr "" +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "가격 계산에서 지정한 일 수보다 오래된 재고 항목을 제외합니다" -#: common/setting/system.py:606 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" +#: common/setting/system.py:611 +msgid "Use Variant Pricing" +msgstr "변형(Variant) 가격 사용" #: common/setting/system.py:612 +msgid "Include variant pricing in overall pricing calculations" +msgstr "전체 가격 계산에 변형(Variant) 가격을 포함합니다" + +#: common/setting/system.py:617 +msgid "Active Variants Only" +msgstr "활성 변형만" + +#: common/setting/system.py:619 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "변형(Variant) 가격 계산에 활성 변형 부품만 사용합니다" + +#: common/setting/system.py:625 msgid "Auto Update Pricing" -msgstr "" - -#: common/setting/system.py:614 -msgid "Automatically update part pricing when internal data changes" -msgstr "" - -#: common/setting/system.py:620 -msgid "Pricing Rebuild Interval" -msgstr "" - -#: common/setting/system.py:621 -msgid "Number of days before part pricing is automatically updated" -msgstr "" +msgstr "가격 자동 업데이트" #: common/setting/system.py:627 -msgid "Internal Prices" -msgstr "" - -#: common/setting/system.py:628 -msgid "Enable internal prices for parts" -msgstr "" +msgid "Automatically update part pricing when internal data changes" +msgstr "내부 데이터가 변경되면 부품 가격을 자동으로 업데이트" #: common/setting/system.py:633 -msgid "Internal Price Override" -msgstr "" +msgid "Pricing Rebuild Interval" +msgstr "가격 재구성 간격" -#: common/setting/system.py:635 -msgid "If available, internal prices override price range calculations" -msgstr "" +#: common/setting/system.py:634 +msgid "Number of days before part pricing is automatically updated" +msgstr "부품 가격이 자동으로 업데이트되기까지의 일 수" + +#: common/setting/system.py:640 +msgid "Internal Prices" +msgstr "내부 가격" #: common/setting/system.py:641 +msgid "Enable internal prices for parts" +msgstr "부품에 대해 내부 가격 사용" + +#: common/setting/system.py:646 +msgid "Internal Price Override" +msgstr "내부 가격 우선 적용" + +#: common/setting/system.py:648 +msgid "If available, internal prices override price range calculations" +msgstr "가능한 경우 내부 가격이 가격 범위 계산보다 우선합니다" + +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" -msgstr "" +msgstr "BOM 수량 0 허용" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" -msgstr "" +msgstr "부품의 BOM 항목에 수량 0을 허용합니다. 설정 수량을 사용해 빌드 수량과 무관하게 빌드당 필요한 수량을 정의할 수 있습니다" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" -msgstr "" - -#: common/setting/system.py:650 -msgid "Enable label printing from the web interface" -msgstr "" - -#: common/setting/system.py:655 -msgid "Label Image DPI" -msgstr "" - -#: common/setting/system.py:657 -msgid "DPI resolution when generating image files to supply to label printing plugins" -msgstr "" +msgstr "라벨 인쇄 사용" #: common/setting/system.py:663 -msgid "Enable Reports" -msgstr "" +msgid "Enable label printing from the web interface" +msgstr "웹 인터페이스에서 라벨 인쇄를 사용합니다" -#: common/setting/system.py:664 -msgid "Enable generation of reports" -msgstr "" - -#: common/setting/system.py:669 -msgid "Debug Mode" -msgstr "" +#: common/setting/system.py:668 +msgid "Label Image DPI" +msgstr "라벨 이미지 DPI" #: common/setting/system.py:670 -msgid "Generate reports in debug mode (HTML output)" -msgstr "" - -#: common/setting/system.py:675 -msgid "Log Report Errors" -msgstr "" +msgid "DPI resolution when generating image files to supply to label printing plugins" +msgstr "라벨 인쇄 플러그인에 제공할 이미지 파일 생성 시 DPI 해상도" #: common/setting/system.py:676 -msgid "Log errors which occur when generating reports" -msgstr "" +msgid "Enable Reports" +msgstr "보고서 사용" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 -msgid "Page Size" -msgstr "" +#: common/setting/system.py:677 +msgid "Enable generation of reports" +msgstr "보고서 생성을 사용합니다" #: common/setting/system.py:682 -msgid "Default page size for PDF reports" -msgstr "" +msgid "Debug Mode" +msgstr "디버그 모드" -#: common/setting/system.py:687 -msgid "Enforce Parameter Units" -msgstr "" +#: common/setting/system.py:683 +msgid "Generate reports in debug mode (HTML output)" +msgstr "디버그 모드에서 보고서 생성(HTML 출력)" + +#: common/setting/system.py:688 +msgid "Log Report Errors" +msgstr "보고서 오류 로그" #: common/setting/system.py:689 -msgid "If units are provided, parameter values must match the specified units" -msgstr "" +msgid "Log errors which occur when generating reports" +msgstr "보고서 생성 중 발생하는 오류를 기록합니다" + +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 +msgid "Page Size" +msgstr "페이지 크기" #: common/setting/system.py:695 -msgid "Globally Unique Serials" -msgstr "" +msgid "Default page size for PDF reports" +msgstr "PDF 보고서의 기본 페이지 크기" -#: common/setting/system.py:696 -msgid "Serial numbers for stock items must be globally unique" -msgstr "" - -#: common/setting/system.py:701 -msgid "Delete Depleted Stock" -msgstr "" +#: common/setting/system.py:700 +msgid "Enforce Parameter Units" +msgstr "매개변수 단위 강제" #: common/setting/system.py:702 -msgid "Determines default behavior when a stock item is depleted" -msgstr "" - -#: common/setting/system.py:707 -msgid "Batch Code Template" -msgstr "" +msgid "If units are provided, parameter values must match the specified units" +msgstr "단위가 제공된 경우, 매개변수 값은 지정된 단위와 일치해야 합니다" #: common/setting/system.py:708 +msgid "Globally Unique Serials" +msgstr "전역 고유 시리얼" + +#: common/setting/system.py:709 +msgid "Serial numbers for stock items must be globally unique" +msgstr "재고 항목의 시리얼 번호는 전역적으로 고유해야 합니다" + +#: common/setting/system.py:714 +msgid "Delete Depleted Stock" +msgstr "소진된 재고 삭제" + +#: common/setting/system.py:715 +msgid "Determines default behavior when a stock item is depleted" +msgstr "재고 항목이 소진되었을 때의 기본 동작을 결정합니다" + +#: common/setting/system.py:720 +msgid "Batch Code Template" +msgstr "배치 코드 템플릿" + +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" -msgstr "" +msgstr "재고 항목의 기본 배치 코드를 생성하기 위한 템플릿" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" -msgstr "" - -#: common/setting/system.py:713 -msgid "Enable stock expiry functionality" -msgstr "" - -#: common/setting/system.py:718 -msgid "Sell Expired Stock" -msgstr "" - -#: common/setting/system.py:719 -msgid "Allow sale of expired stock" -msgstr "" - -#: common/setting/system.py:724 -msgid "Stock Stale Time" -msgstr "" +msgstr "재고 만료" #: common/setting/system.py:726 -msgid "Number of days stock items are considered stale before expiring" -msgstr "" +msgid "Enable stock expiry functionality" +msgstr "재고 만료 기능 사용" -#: common/setting/system.py:733 -msgid "Build Expired Stock" -msgstr "" +#: common/setting/system.py:731 +msgid "Sell Expired Stock" +msgstr "만료 재고 판매" -#: common/setting/system.py:734 -msgid "Allow building with expired stock" -msgstr "" +#: common/setting/system.py:732 +msgid "Allow sale of expired stock" +msgstr "만료된 재고의 판매를 허용합니다" + +#: common/setting/system.py:737 +msgid "Stock Stale Time" +msgstr "재고 경과 시간" #: common/setting/system.py:739 -msgid "Stock Ownership Control" -msgstr "" - -#: common/setting/system.py:740 -msgid "Enable ownership control over stock locations and items" -msgstr "" - -#: common/setting/system.py:745 -msgid "Stock Location Default Icon" -msgstr "" +msgid "Number of days stock items are considered stale before expiring" +msgstr "만료 전 재고 항목을 오래된 것으로 간주하는 일 수" #: common/setting/system.py:746 -msgid "Stock location default icon (empty means no icon)" -msgstr "" +msgid "Build Expired Stock" +msgstr "만료 재고로 빌드" -#: common/setting/system.py:751 -msgid "Show Installed Stock Items" -msgstr "" +#: common/setting/system.py:747 +msgid "Allow building with expired stock" +msgstr "만료된 재고로 빌드하는 것을 허용합니다" #: common/setting/system.py:752 -msgid "Display installed stock items in stock tables" -msgstr "" +msgid "Stock Ownership Control" +msgstr "재고 소유권 제어" -#: common/setting/system.py:757 -msgid "Check BOM when installing items" -msgstr "" +#: common/setting/system.py:753 +msgid "Enable ownership control over stock locations and items" +msgstr "재고 위치 및 항목에 대한 소유권 제어를 사용합니다" + +#: common/setting/system.py:758 +msgid "Stock Location Default Icon" +msgstr "재고 위치 기본 아이콘" #: common/setting/system.py:759 -msgid "Installed stock items must exist in the BOM for the parent part" -msgstr "" +msgid "Stock location default icon (empty means no icon)" +msgstr "재고 위치 기본 아이콘(비어 있으면 아이콘 없음)" + +#: common/setting/system.py:764 +msgid "Show Installed Stock Items" +msgstr "설치된 재고 항목 표시" #: common/setting/system.py:765 +msgid "Display installed stock items in stock tables" +msgstr "재고 표에서 설치된 재고 항목을 표시합니다" + +#: common/setting/system.py:770 +msgid "Check BOM when installing items" +msgstr "항목 설치 시 BOM 확인" + +#: common/setting/system.py:772 +msgid "Installed stock items must exist in the BOM for the parent part" +msgstr "설치된 재고 항목은 상위 부품의 BOM에 존재해야 합니다" + +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" -msgstr "" +msgstr "재고 없음 상태 이동 허용" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" - -#: common/setting/system.py:773 -msgid "Build Order Reference Pattern" -msgstr "" - -#: common/setting/system.py:774 -msgid "Required pattern for generating Build Order reference field" -msgstr "" - -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 -msgid "Require Responsible Owner" -msgstr "" - -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 -msgid "A responsible owner must be assigned to each order" -msgstr "" - -#: common/setting/system.py:785 -msgid "Require Active Part" -msgstr "" +msgstr "재고가 없는 재고 항목을 재고 위치 간에 이동할 수 있도록 허용합니다" #: common/setting/system.py:786 -msgid "Prevent build order creation for inactive parts" -msgstr "" +msgid "Build Order Reference Pattern" +msgstr "작업 지시서 참조번호 패턴" -#: common/setting/system.py:791 -msgid "Require Locked Part" -msgstr "" +#: common/setting/system.py:787 +msgid "Required pattern for generating Build Order reference field" +msgstr "작업 지시서 참조번호 필드를 생성하기 위한 필수 패턴" -#: common/setting/system.py:792 -msgid "Prevent build order creation for unlocked parts" -msgstr "" +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 +msgid "Require Responsible Owner" +msgstr "책임자 필수" -#: common/setting/system.py:797 -msgid "Require Valid BOM" -msgstr "" +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 +msgid "A responsible owner must be assigned to each order" +msgstr "각 주문에는 책임자가 지정되어야 합니다" #: common/setting/system.py:798 -msgid "Prevent build order creation unless BOM has been validated" -msgstr "" +msgid "Require Active Part" +msgstr "활성 부품 필수" -#: common/setting/system.py:803 -msgid "Require Closed Child Orders" -msgstr "" +#: common/setting/system.py:799 +msgid "Prevent build order creation for inactive parts" +msgstr "비활성 부품에 대해 작업 지시서 생성을 방지합니다" + +#: common/setting/system.py:804 +msgid "Require Locked Part" +msgstr "잠긴 부품 필수" #: common/setting/system.py:805 -msgid "Prevent build order completion until all child orders are closed" -msgstr "" +msgid "Prevent build order creation for unlocked parts" +msgstr "잠기지 않은 부품에 대해 작업 지시서 생성을 방지합니다" + +#: common/setting/system.py:810 +msgid "Require Valid BOM" +msgstr "유효한 BOM 필수" #: common/setting/system.py:811 +msgid "Prevent build order creation unless BOM has been validated" +msgstr "BOM이 검증되지 않으면 작업 지시서 생성을 방지합니다" + +#: common/setting/system.py:816 +msgid "Require Closed Child Orders" +msgstr "하위 주문 종료 필수" + +#: common/setting/system.py:818 +msgid "Prevent build order completion until all child orders are closed" +msgstr "모든 하위 주문이 종료될 때까지 작업 지시서 완료를 방지합니다" + +#: common/setting/system.py:824 msgid "External Build Orders" -msgstr "" - -#: common/setting/system.py:812 -msgid "Enable external build order functionality" -msgstr "" - -#: common/setting/system.py:817 -msgid "Block Until Tests Pass" -msgstr "" - -#: common/setting/system.py:819 -msgid "Prevent build outputs from being completed until all required tests pass" -msgstr "" +msgstr "외주 생산 작업 지시서" #: common/setting/system.py:825 +msgid "Enable external build order functionality" +msgstr "외주 생산 작업 지시서 기능 사용" + +#: common/setting/system.py:830 +msgid "Block Until Tests Pass" +msgstr "테스트 통과 전까지 차단" + +#: common/setting/system.py:832 +msgid "Prevent build outputs from being completed until all required tests pass" +msgstr "필수 테스트가 모두 통과될 때까지 생산 완제품 완료를 방지합니다" + +#: common/setting/system.py:838 msgid "Enable Return Orders" -msgstr "" +msgstr "반품 주문 사용" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" -msgstr "" +msgstr "사용자 인터페이스에서 반품 주문 기능을 사용합니다" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" -msgstr "" +msgstr "반품 주문 참조 패턴" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" -msgstr "" +msgstr "반품 주문 참조 필드를 생성하기 위한 필수 패턴" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" -msgstr "" +msgstr "완료된 반품 주문 편집" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" -msgstr "" - -#: common/setting/system.py:853 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/setting/system.py:854 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/setting/system.py:865 -msgid "Sales Order Default Shipment" -msgstr "" +msgstr "반품 주문이 완료된 후에도 편집을 허용합니다" #: common/setting/system.py:866 -msgid "Enable creation of default shipment with sales orders" -msgstr "" +msgid "Sales Order Reference Pattern" +msgstr "판매 주문 참조 패턴" -#: common/setting/system.py:871 -msgid "Edit Completed Sales Orders" -msgstr "" +#: common/setting/system.py:867 +msgid "Required pattern for generating Sales Order reference field" +msgstr "판매 주문 참조 필드를 생성하기 위한 필수 패턴" -#: common/setting/system.py:873 -msgid "Allow editing of sales orders after they have been shipped or completed" -msgstr "" +#: common/setting/system.py:878 +msgid "Sales Order Default Shipment" +msgstr "판매 주문 기본 배송" #: common/setting/system.py:879 +msgid "Enable creation of default shipment with sales orders" +msgstr "판매 주문과 함께 기본 배송 생성 사용" + +#: common/setting/system.py:884 +msgid "Edit Completed Sales Orders" +msgstr "완료된 판매 주문 편집" + +#: common/setting/system.py:886 +msgid "Allow editing of sales orders after they have been shipped or completed" +msgstr "판매 주문이 배송되었거나 완료된 후에도 편집을 허용합니다" + +#: common/setting/system.py:892 msgid "Shipment Requires Checking" -msgstr "" +msgstr "배송 확인 필요" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" -msgstr "" +msgstr "항목이 확인될 때까지 배송 완료를 방지합니다" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" -msgstr "" +msgstr "배송된 주문을 완료로 표시" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" +msgstr "\"배송됨\" 상태를 건너뛰고, 배송된 것으로 표시된 판매 주문을 자동으로 완료 처리합니다" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" -msgstr "" +msgstr "구매 주문 참조 패턴" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" -msgstr "" +msgstr "구매 주문 참조 필드를 생성하기 위한 필수 패턴" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" -msgstr "" +msgstr "완료된 구매 주문 편집" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" -msgstr "" +msgstr "구매 주문이 배송되었거나 완료된 후에도 편집을 허용합니다" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" -msgstr "" +msgstr "통화 변환" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" -msgstr "" +msgstr "재고 수령 시 항목 값을 기준 통화로 변환합니다" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" -msgstr "" - -#: common/setting/system.py:925 -msgid "Automatically mark purchase orders as complete when all line items are received" -msgstr "" - -#: common/setting/system.py:932 -msgid "Enable password forgot" -msgstr "" - -#: common/setting/system.py:933 -msgid "Enable password forgot function on the login pages" -msgstr "" +msgstr "구매 주문 자동 완료" #: common/setting/system.py:938 -msgid "Enable registration" -msgstr "" - -#: common/setting/system.py:939 -msgid "Enable self-registration for users on the login pages" -msgstr "" - -#: common/setting/system.py:944 -msgid "Enable SSO" -msgstr "" +msgid "Automatically mark purchase orders as complete when all line items are received" +msgstr "모든 라인 항목을 수령하면 구매 주문을 자동으로 완료로 표시합니다" #: common/setting/system.py:945 -msgid "Enable SSO on the login pages" -msgstr "" +msgid "Enable password forgot" +msgstr "비밀번호 찾기 사용" -#: common/setting/system.py:950 -msgid "Enable SSO registration" -msgstr "" +#: common/setting/system.py:946 +msgid "Enable password forgot function on the login pages" +msgstr "로그인 페이지에서 비밀번호 찾기 기능을 사용합니다" + +#: common/setting/system.py:951 +msgid "Enable registration" +msgstr "회원가입 사용" #: common/setting/system.py:952 -msgid "Enable self-registration via SSO for users on the login pages" -msgstr "" +msgid "Enable self-registration for users on the login pages" +msgstr "로그인 페이지에서 사용자 자기 등록(회원가입)을 사용합니다" + +#: common/setting/system.py:957 +msgid "Enable SSO" +msgstr "SSO 사용" #: common/setting/system.py:958 +msgid "Enable SSO on the login pages" +msgstr "로그인 페이지에서 SSO를 사용합니다" + +#: common/setting/system.py:963 +msgid "Enable SSO registration" +msgstr "SSO 등록 사용" + +#: common/setting/system.py:965 +msgid "Enable self-registration via SSO for users on the login pages" +msgstr "로그인 페이지에서 SSO를 통한 자기 등록(회원가입)을 사용합니다" + +#: common/setting/system.py:971 msgid "Enable SSO group sync" -msgstr "" +msgstr "SSO 그룹 동기화 사용" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" +msgstr "IdP에서 제공하는 그룹과 InvenTree 그룹의 동기화를 사용합니다" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" -msgstr "" - -#: common/setting/system.py:967 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" - -#: common/setting/system.py:972 -msgid "SSO group map" -msgstr "" - -#: common/setting/system.py:974 -msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" +msgstr "SSO 그룹 키" #: common/setting/system.py:980 +msgid "The name of the groups claim attribute provided by the IdP" +msgstr "IdP에서 제공하는 groups 클레임 속성의 이름" + +#: common/setting/system.py:985 +msgid "SSO group map" +msgstr "SSO 그룹 매핑" + +#: common/setting/system.py:987 +msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." +msgstr "SSO 그룹을 로컬 InvenTree 그룹으로 매핑합니다. 로컬 그룹이 없으면 생성됩니다." + +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" -msgstr "" - -#: common/setting/system.py:982 -msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" -msgstr "" - -#: common/setting/system.py:988 -msgid "Email required" -msgstr "" - -#: common/setting/system.py:989 -msgid "Require user to supply mail on signup" -msgstr "" - -#: common/setting/system.py:994 -msgid "Auto-fill SSO users" -msgstr "" +msgstr "SSO 외부 그룹 제거" #: common/setting/system.py:995 -msgid "Automatically fill out user-details from SSO account-data" -msgstr "" - -#: common/setting/system.py:1000 -msgid "Mail twice" -msgstr "" +msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" +msgstr "IdP에서 제공되지 않는 그룹이 사용자에게 할당되어 있으면 제거할지 여부입니다. 이 설정을 비활성화하면 보안 문제가 발생할 수 있습니다" #: common/setting/system.py:1001 -msgid "On signup ask users twice for their mail" -msgstr "" +msgid "Email required" +msgstr "이메일 필수" -#: common/setting/system.py:1006 -msgid "Password twice" -msgstr "" +#: common/setting/system.py:1002 +msgid "Require user to supply mail on signup" +msgstr "회원가입 시 이메일 입력을 요구합니다" #: common/setting/system.py:1007 -msgid "On signup ask users twice for their password" -msgstr "" +msgid "Auto-fill SSO users" +msgstr "SSO 사용자 자동 입력" -#: common/setting/system.py:1012 -msgid "Allowed domains" -msgstr "" +#: common/setting/system.py:1008 +msgid "Automatically fill out user-details from SSO account-data" +msgstr "SSO 계정 데이터에서 사용자 상세 정보를 자동으로 채웁니다" + +#: common/setting/system.py:1013 +msgid "Mail twice" +msgstr "이메일 2회 입력" #: common/setting/system.py:1014 -msgid "Restrict signup to certain domains (comma-separated, starting with @)" -msgstr "" +msgid "On signup ask users twice for their mail" +msgstr "회원가입 시 이메일을 두 번 입력하도록 요청합니다" + +#: common/setting/system.py:1019 +msgid "Password twice" +msgstr "비밀번호 2회 입력" #: common/setting/system.py:1020 +msgid "On signup ask users twice for their password" +msgstr "회원가입 시 비밀번호를 두 번 입력하도록 요청합니다" + +#: common/setting/system.py:1025 +msgid "Allowed domains" +msgstr "허용된 도메인" + +#: common/setting/system.py:1027 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" +msgstr "특정 도메인으로 회원가입을 제한합니다(쉼표로 구분, @로 시작)" + +#: common/setting/system.py:1033 msgid "Group on signup" -msgstr "" +msgstr "회원가입 시 그룹" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." -msgstr "" - -#: common/setting/system.py:1028 -msgid "Enforce MFA" -msgstr "" - -#: common/setting/system.py:1029 -msgid "Users must use multifactor security." -msgstr "" - -#: common/setting/system.py:1034 -msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." -msgstr "" - -#: common/setting/system.py:1039 -msgid "Check plugins on startup" -msgstr "" +msgstr "등록 시 새 사용자가 할당될 그룹입니다. SSO 그룹 동기화가 활성화된 경우, IdP에서 그룹을 할당할 수 없을 때만 이 그룹이 설정됩니다." #: common/setting/system.py:1041 +msgid "Enforce MFA" +msgstr "MFA 강제" + +#: common/setting/system.py:1042 +msgid "Users must use multifactor security." +msgstr "사용자는 다중 요소 보안을 사용해야 합니다." + +#: common/setting/system.py:1047 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "이 설정을 활성화하면 모든 사용자가 다중 요소 인증을 설정해야 합니다. 모든 세션이 즉시 연결 해제됩니다." + +#: common/setting/system.py:1052 +msgid "Check plugins on startup" +msgstr "시작 시 플러그인 확인" + +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" -msgstr "" +msgstr "시작 시 모든 플러그인이 설치되어 있는지 확인합니다(컨테이너 환경에서 사용)" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" -msgstr "" - -#: common/setting/system.py:1049 -msgid "Enable periodic checks for updates to installed plugins" -msgstr "" - -#: common/setting/system.py:1055 -msgid "Enable URL integration" -msgstr "" - -#: common/setting/system.py:1056 -msgid "Enable plugins to add URL routes" -msgstr "" +msgstr "플러그인 업데이트 확인" #: common/setting/system.py:1062 -msgid "Enable navigation integration" -msgstr "" +msgid "Enable periodic checks for updates to installed plugins" +msgstr "설치된 플러그인의 업데이트를 주기적으로 확인합니다" -#: common/setting/system.py:1063 -msgid "Enable plugins to integrate into navigation" -msgstr "" +#: common/setting/system.py:1068 +msgid "Enable URL integration" +msgstr "URL 통합 사용" #: common/setting/system.py:1069 -msgid "Enable app integration" -msgstr "" +msgid "Enable plugins to add URL routes" +msgstr "플러그인이 URL 라우트를 추가할 수 있도록 허용합니다" -#: common/setting/system.py:1070 -msgid "Enable plugins to add apps" -msgstr "" +#: common/setting/system.py:1075 +msgid "Enable navigation integration" +msgstr "내비게이션 통합 사용" #: common/setting/system.py:1076 -msgid "Enable schedule integration" -msgstr "" +msgid "Enable plugins to integrate into navigation" +msgstr "플러그인이 내비게이션에 통합될 수 있도록 허용합니다" -#: common/setting/system.py:1077 -msgid "Enable plugins to run scheduled tasks" -msgstr "" +#: common/setting/system.py:1082 +msgid "Enable app integration" +msgstr "앱 통합 사용" #: common/setting/system.py:1083 -msgid "Enable event integration" -msgstr "" +msgid "Enable plugins to add apps" +msgstr "플러그인이 앱을 추가할 수 있도록 허용합니다" -#: common/setting/system.py:1084 -msgid "Enable plugins to respond to internal events" -msgstr "" +#: common/setting/system.py:1089 +msgid "Enable schedule integration" +msgstr "스케줄 통합 사용" #: common/setting/system.py:1090 -msgid "Enable interface integration" -msgstr "" +msgid "Enable plugins to run scheduled tasks" +msgstr "플러그인이 예약 작업을 실행할 수 있도록 허용합니다" -#: common/setting/system.py:1091 -msgid "Enable plugins to integrate into the user interface" -msgstr "" +#: common/setting/system.py:1096 +msgid "Enable event integration" +msgstr "이벤트 통합 사용" #: common/setting/system.py:1097 -msgid "Enable mail integration" -msgstr "" +msgid "Enable plugins to respond to internal events" +msgstr "플러그인이 내부 이벤트에 응답할 수 있도록 허용합니다" -#: common/setting/system.py:1098 -msgid "Enable plugins to process outgoing/incoming mails" -msgstr "" +#: common/setting/system.py:1103 +msgid "Enable interface integration" +msgstr "인터페이스 통합 사용" #: common/setting/system.py:1104 -msgid "Enable project codes" -msgstr "" - -#: common/setting/system.py:1105 -msgid "Enable project codes for tracking projects" -msgstr "" +msgid "Enable plugins to integrate into the user interface" +msgstr "플러그인이 사용자 인터페이스에 통합될 수 있도록 허용합니다" #: common/setting/system.py:1110 -msgid "Enable Stocktake" -msgstr "" +msgid "Enable mail integration" +msgstr "메일 통합 사용" -#: common/setting/system.py:1112 -msgid "Enable functionality for recording historical stock levels and value" -msgstr "" +#: common/setting/system.py:1111 +msgid "Enable plugins to process outgoing/incoming mails" +msgstr "플러그인이 발신/수신 메일을 처리할 수 있도록 허용합니다" + +#: common/setting/system.py:1117 +msgid "Enable project codes" +msgstr "프로젝트 코드 사용" #: common/setting/system.py:1118 +msgid "Enable project codes for tracking projects" +msgstr "프로젝트를 추적하기 위한 프로젝트 코드를 사용합니다" + +#: common/setting/system.py:1123 +msgid "Enable Stocktake" +msgstr "재고 실사 사용" + +#: common/setting/system.py:1125 +msgid "Enable functionality for recording historical stock levels and value" +msgstr "과거 재고 수준과 가치를 기록하는 기능을 사용합니다" + +#: common/setting/system.py:1131 msgid "Exclude External Locations" -msgstr "" - -#: common/setting/system.py:1120 -msgid "Exclude stock items in external locations from stocktake calculations" -msgstr "" - -#: common/setting/system.py:1126 -msgid "Automatic Stocktake Period" -msgstr "" - -#: common/setting/system.py:1127 -msgid "Number of days between automatic stocktake recording" -msgstr "" +msgstr "외부 위치 제외" #: common/setting/system.py:1133 +msgid "Exclude stock items in external locations from stocktake calculations" +msgstr "외부 위치의 재고 품목을 재고 실사 계산에서 제외합니다" + +#: common/setting/system.py:1139 +msgid "Automatic Stocktake Period" +msgstr "자동 재고 실사 주기" + +#: common/setting/system.py:1140 +msgid "Number of days between automatic stocktake recording" +msgstr "자동 재고 실사 기록 간격(일)" + +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" -msgstr "" +msgstr "오래된 재고 실사 항목 삭제" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" -msgstr "" +msgstr "지정된 일수보다 오래된 재고 실사 항목을 삭제합니다" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" -msgstr "" +msgstr "재고 실사 삭제 간격" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" -msgstr "" +msgstr "재고 실사 항목은 지정된 일수 후 삭제됩니다" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" -msgstr "" +msgstr "오래된 재고 추적 항목 삭제" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" -msgstr "" +msgstr "지정된 일수보다 오래된 재고 추적 항목을 삭제합니다" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" -msgstr "" - -#: common/setting/system.py:1160 -msgid "Stock tracking entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1167 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1168 -msgid "Display Users full names instead of usernames" -msgstr "" +msgstr "재고 추적 삭제 간격" #: common/setting/system.py:1173 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1174 -msgid "Display Users Profiles on their profile page" -msgstr "" - -#: common/setting/system.py:1179 -msgid "Enable Test Station Data" -msgstr "" +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "재고 추적 항목은 지정된 일수 후 삭제됩니다" #: common/setting/system.py:1180 -msgid "Enable test station data collection for test results" -msgstr "" +msgid "Display Users full names" +msgstr "사용자 전체 이름 표시" -#: common/setting/system.py:1185 -msgid "Enable Machine Ping" -msgstr "" +#: common/setting/system.py:1181 +msgid "Display Users full names instead of usernames" +msgstr "사용자 이름 대신 사용자 전체 이름을 표시합니다" + +#: common/setting/system.py:1186 +msgid "Display User Profiles" +msgstr "사용자 프로필 표시" #: common/setting/system.py:1187 +msgid "Display Users Profiles on their profile page" +msgstr "프로필 페이지에 사용자 프로필을 표시합니다" + +#: common/setting/system.py:1192 +msgid "Enable Test Station Data" +msgstr "테스트 스테이션 데이터 사용" + +#: common/setting/system.py:1193 +msgid "Enable test station data collection for test results" +msgstr "테스트 결과를 위한 테스트 스테이션 데이터 수집을 사용합니다" + +#: common/setting/system.py:1198 +msgid "Enable Machine Ping" +msgstr "장비 핑 사용" + +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" -msgstr "" +msgstr "등록된 장비의 상태를 확인하기 위해 주기적으로 핑 작업을 수행합니다" #: common/setting/user.py:23 msgid "Inline label display" -msgstr "" +msgstr "인라인 라벨 표시" #: common/setting/user.py:25 msgid "Display PDF labels in the browser, instead of downloading as a file" -msgstr "" +msgstr "PDF 라벨을 파일로 다운로드하는 대신 브라우저에서 표시합니다" #: common/setting/user.py:31 msgid "Default label printer" -msgstr "" +msgstr "기본 라벨 프린터" #: common/setting/user.py:32 msgid "Configure which label printer should be selected by default" -msgstr "" +msgstr "기본으로 선택될 라벨 프린터를 설정합니다" #: common/setting/user.py:37 msgid "Inline report display" -msgstr "" +msgstr "인라인 보고서 표시" #: common/setting/user.py:39 msgid "Display PDF reports in the browser, instead of downloading as a file" -msgstr "" +msgstr "PDF 보고서를 파일로 다운로드하는 대신 브라우저에서 표시합니다" #: common/setting/user.py:45 msgid "Barcode Scanner in Form Fields" -msgstr "" +msgstr "폼 필드의 바코드 스캐너" #: common/setting/user.py:46 msgid "Allow barcode scanner input in form fields" -msgstr "" +msgstr "폼 필드에서 바코드 스캐너 입력을 허용합니다" #: common/setting/user.py:51 msgid "Search Parts" -msgstr "" +msgstr "부품 검색" #: common/setting/user.py:52 msgid "Display parts in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 부품을 표시합니다" #: common/setting/user.py:57 msgid "Search Supplier Parts" -msgstr "" +msgstr "공급업체 부품 검색" #: common/setting/user.py:58 msgid "Display supplier parts in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 공급업체 부품을 표시합니다" #: common/setting/user.py:63 msgid "Search Manufacturer Parts" -msgstr "" +msgstr "제조업체 부품 검색" #: common/setting/user.py:64 msgid "Display manufacturer parts in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 제조업체 부품을 표시합니다" #: common/setting/user.py:69 msgid "Hide Inactive Parts" -msgstr "" +msgstr "비활성 부품 숨기기" #: common/setting/user.py:70 msgid "Excluded inactive parts from search preview window" -msgstr "" +msgstr "검색 미리보기 창에서 비활성 부품을 제외합니다" #: common/setting/user.py:75 msgid "Search Categories" -msgstr "" +msgstr "카테고리 검색" #: common/setting/user.py:76 msgid "Display part categories in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 부품 카테고리를 표시합니다" #: common/setting/user.py:81 msgid "Search Stock" -msgstr "" +msgstr "재고 검색" #: common/setting/user.py:82 msgid "Display stock items in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 재고 품목을 표시합니다" #: common/setting/user.py:87 msgid "Hide Unavailable Stock Items" -msgstr "" +msgstr "사용 불가 재고 품목 숨기기" #: common/setting/user.py:89 msgid "Exclude stock items which are not available from the search preview window" -msgstr "" +msgstr "검색 미리보기 창에서 사용 불가한 재고 품목을 제외합니다" #: common/setting/user.py:95 msgid "Search Locations" -msgstr "" +msgstr "위치 검색" #: common/setting/user.py:96 msgid "Display stock locations in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 재고 위치를 표시합니다" #: common/setting/user.py:101 msgid "Search Companies" -msgstr "" +msgstr "회사 검색" #: common/setting/user.py:102 msgid "Display companies in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 회사를 표시합니다" #: common/setting/user.py:107 msgid "Search Build Orders" -msgstr "" +msgstr "빌드 주문 검색" #: common/setting/user.py:108 msgid "Display build orders in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 빌드 주문을 표시합니다" #: common/setting/user.py:113 msgid "Search Purchase Orders" -msgstr "" +msgstr "구매 주문 검색" #: common/setting/user.py:114 msgid "Display purchase orders in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 구매 주문을 표시합니다" #: common/setting/user.py:119 msgid "Exclude Inactive Purchase Orders" -msgstr "" +msgstr "비활성 구매 주문 제외" #: common/setting/user.py:120 msgid "Exclude inactive purchase orders from search preview window" -msgstr "" +msgstr "검색 미리보기 창에서 비활성 구매 주문을 제외합니다" #: common/setting/user.py:125 msgid "Search Sales Orders" -msgstr "" +msgstr "판매 주문 검색" #: common/setting/user.py:126 msgid "Display sales orders in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 판매 주문을 표시합니다" #: common/setting/user.py:131 msgid "Exclude Inactive Sales Orders" -msgstr "" +msgstr "비활성 판매 주문 제외" #: common/setting/user.py:132 msgid "Exclude inactive sales orders from search preview window" -msgstr "" +msgstr "검색 미리보기 창에서 비활성 판매 주문을 제외합니다" #: common/setting/user.py:137 msgid "Search Sales Order Shipments" -msgstr "" +msgstr "판매 주문 배송 검색" #: common/setting/user.py:138 msgid "Display sales order shipments in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 판매 주문 배송을 표시합니다" #: common/setting/user.py:143 msgid "Search Return Orders" -msgstr "" +msgstr "반품 주문 검색" #: common/setting/user.py:144 msgid "Display return orders in search preview window" -msgstr "" +msgstr "검색 미리보기 창에 반품 주문을 표시합니다" #: common/setting/user.py:149 msgid "Exclude Inactive Return Orders" -msgstr "" +msgstr "비활성 반품 주문 제외" #: common/setting/user.py:150 msgid "Exclude inactive return orders from search preview window" -msgstr "" +msgstr "검색 미리보기 창에서 비활성 반품 주문을 제외합니다" #: common/setting/user.py:155 msgid "Search Preview Results" -msgstr "" +msgstr "검색 미리보기 결과" #: common/setting/user.py:157 msgid "Number of results to show in each section of the search preview window" -msgstr "" +msgstr "검색 미리보기 창의 각 섹션에 표시할 결과 수" #: common/setting/user.py:163 msgid "Regex Search" -msgstr "" +msgstr "정규식 검색" #: common/setting/user.py:164 msgid "Enable regular expressions in search queries" -msgstr "" +msgstr "검색 쿼리에서 정규식을 사용할 수 있도록 합니다" #: common/setting/user.py:169 msgid "Whole Word Search" -msgstr "" +msgstr "단어 단위 검색" #: common/setting/user.py:170 msgid "Search queries return results for whole word matches" -msgstr "" +msgstr "검색 쿼리가 단어 전체가 일치하는 결과만 반환합니다" #: common/setting/user.py:175 msgid "Search Notes" -msgstr "" +msgstr "노트 검색" #: common/setting/user.py:177 msgid "Search queries return results for matches from the item's notes" -msgstr "" +msgstr "검색 쿼리가 항목의 노트에서 일치하는 결과를 반환합니다" #: common/setting/user.py:183 msgid "Escape Key Closes Forms" -msgstr "" +msgstr "Esc 키로 폼 닫기" #: common/setting/user.py:184 msgid "Use the escape key to close modal forms" -msgstr "" +msgstr "Esc 키를 사용해 모달 폼을 닫습니다" #: common/setting/user.py:189 msgid "Fixed Navbar" -msgstr "" +msgstr "내비게이션 바 고정" #: common/setting/user.py:190 msgid "The navbar position is fixed to the top of the screen" -msgstr "" +msgstr "내비게이션 바를 화면 상단에 고정합니다" #: common/setting/user.py:195 msgid "Fixed Table Headers" -msgstr "" +msgstr "테이블 헤더 고정" #: common/setting/user.py:196 msgid "Table headers are fixed to the top of the table" -msgstr "" +msgstr "테이블 헤더를 테이블 상단에 고정합니다" #: common/setting/user.py:201 msgid "Show Spotlight" -msgstr "" +msgstr "스포트라이트 표시" #: common/setting/user.py:202 msgid "Enable spotlight navigation functionality" -msgstr "" +msgstr "스포트라이트 내비게이션 기능을 사용합니다" #: common/setting/user.py:207 msgid "Navigation Icons" -msgstr "" +msgstr "내비게이션 아이콘" #: common/setting/user.py:208 msgid "Display icons in the navigation bar" -msgstr "" +msgstr "내비게이션 바에 아이콘을 표시합니다" #: common/setting/user.py:213 msgid "Date Format" -msgstr "" +msgstr "날짜 형식" #: common/setting/user.py:214 msgid "Preferred format for displaying dates" -msgstr "" +msgstr "날짜 표시 기본 형식" #: common/setting/user.py:227 msgid "Show Stock History" -msgstr "" +msgstr "재고 기록 표시" #: common/setting/user.py:228 msgid "Display stock history information in the part detail page" -msgstr "" +msgstr "부품 상세 페이지에 재고 기록 정보를 표시합니다" #: common/setting/user.py:233 msgid "Show Last Breadcrumb" -msgstr "" +msgstr "마지막 탐색 경로 표시" #: common/setting/user.py:234 msgid "Show the current page in breadcrumbs" -msgstr "" +msgstr "탐색 경로(브레드크럼)에서 현재 페이지를 표시" #: common/setting/user.py:239 msgid "Show full stock location in tables" -msgstr "" +msgstr "테이블에서 전체 재고 위치 표시" #: common/setting/user.py:241 msgid "Disabled: The full location path is displayed as a hover tooltip. Enabled: The full location path is displayed as plain text." -msgstr "" +msgstr "비활성화: 전체 위치 경로를 마우스오버 툴팁으로 표시합니다. 활성화: 전체 위치 경로를 일반 텍스트로 표시합니다." #: common/setting/user.py:247 msgid "Show full part categories in tables" -msgstr "" +msgstr "테이블에서 전체 부품 카테고리 표시" #: common/setting/user.py:249 msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled: The full category path is displayed as plain text." -msgstr "" +msgstr "비활성화: 전체 카테고리 경로를 마우스오버 툴팁으로 표시합니다. 활성화: 전체 카테고리 경로를 일반 텍스트로 표시합니다." #: common/setting/user.py:255 msgid "Receive error reports" -msgstr "" +msgstr "오류 보고서 수신" #: common/setting/user.py:256 msgid "Receive notifications for system errors" -msgstr "" +msgstr "시스템 오류에 대한 알림을 수신" #: common/setting/user.py:261 msgid "Last used printing machines" -msgstr "" +msgstr "마지막으로 사용한 인쇄 장비" #: common/setting/user.py:262 msgid "Save the last used printing machines for a user" -msgstr "" +msgstr "사용자의 마지막 사용 인쇄 장비를 저장" #: common/validators.py:38 msgid "All models" -msgstr "" +msgstr "모든 모델" #: common/validators.py:63 msgid "No attachment model type provided" -msgstr "" +msgstr "첨부 모델 유형이 제공되지 않았습니다" #: common/validators.py:69 msgid "Invalid attachment model type" -msgstr "" +msgstr "잘못된 첨부 모델 유형입니다" #: common/validators.py:110 msgid "Minimum places cannot be greater than maximum places" -msgstr "" +msgstr "최소 자리수는 최대 자리수보다 클 수 없습니다" #: common/validators.py:122 msgid "Maximum places cannot be less than minimum places" -msgstr "" +msgstr "최대 자리수는 최소 자리수보다 작을 수 없습니다" #: common/validators.py:133 msgid "An empty domain is not allowed." -msgstr "" +msgstr "빈 도메인은 허용되지 않습니다." #: common/validators.py:135 #, python-brace-format msgid "Invalid domain name: {domain}" -msgstr "" +msgstr "잘못된 도메인 이름: {domain}" #: common/validators.py:151 msgid "Value must be uppercase" -msgstr "" +msgstr "값은 대문자여야 합니다" #: common/validators.py:157 msgid "Value must be a valid variable identifier" -msgstr "" +msgstr "값은 유효한 변수 식별자여야 합니다" #: company/api.py:141 msgid "Part is Active" -msgstr "" +msgstr "부품이 활성화됨" #: company/api.py:145 msgid "Manufacturer is Active" -msgstr "" - -#: company/api.py:250 -msgid "Supplier Part is Active" -msgstr "" +msgstr "제조사가 활성화됨" #: company/api.py:252 +msgid "Supplier Part is Active" +msgstr "공급업체 부품이 활성화됨" + +#: company/api.py:254 msgid "Primary Supplier Part" -msgstr "" +msgstr "기본 공급업체 부품" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" -msgstr "" +msgstr "내부 부품이 활성화됨" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" -msgstr "" +msgstr "공급업체가 활성화됨" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" -msgstr "" +msgstr "제조사" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" -msgstr "" +msgstr "회사" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" -msgstr "" +msgstr "재고 있음" #: company/models.py:125 msgid "Companies" -msgstr "" +msgstr "회사" #: company/models.py:153 msgid "Company description" -msgstr "" +msgstr "회사 설명" #: company/models.py:154 msgid "Description of the company" -msgstr "" +msgstr "회사에 대한 설명" #: company/models.py:160 msgid "Website" -msgstr "" +msgstr "웹사이트" #: company/models.py:161 msgid "Company website URL" -msgstr "" +msgstr "회사 웹사이트 URL" #: company/models.py:167 msgid "Phone number" -msgstr "" +msgstr "전화번호" #: company/models.py:169 msgid "Contact phone number" -msgstr "" +msgstr "연락처 전화번호" #: company/models.py:176 msgid "Contact email address" -msgstr "" +msgstr "연락처 이메일 주소" #: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" -msgstr "" +msgstr "담당자" #: company/models.py:183 msgid "Point of contact" -msgstr "" +msgstr "담당자" #: company/models.py:189 msgid "Link to external company information" -msgstr "" +msgstr "외부 회사 정보 링크" #: company/models.py:194 msgid "Is this company active?" -msgstr "" +msgstr "이 회사가 활성 상태인가요?" #: company/models.py:199 msgid "Is customer" -msgstr "" +msgstr "고객 여부" #: company/models.py:200 msgid "Do you sell items to this company?" -msgstr "" +msgstr "이 회사에 품목을 판매하나요?" #: company/models.py:205 msgid "Is supplier" -msgstr "" +msgstr "공급업체 여부" #: company/models.py:206 msgid "Do you purchase items from this company?" -msgstr "" +msgstr "이 회사로부터 품목을 구매하나요?" #: company/models.py:211 msgid "Is manufacturer" -msgstr "" +msgstr "제조사 여부" #: company/models.py:212 msgid "Does this company manufacture parts?" -msgstr "" +msgstr "이 회사가 부품을 제조하나요?" #: company/models.py:220 msgid "Default currency used for this company" -msgstr "" +msgstr "이 회사에서 사용하는 기본 통화" #: company/models.py:227 msgid "Tax ID" -msgstr "" +msgstr "세금 ID" #: company/models.py:228 msgid "Company Tax ID" -msgstr "" +msgstr "회사 세금 ID" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" -msgstr "" +msgstr "주소" #: company/models.py:351 msgid "Addresses" -msgstr "" +msgstr "주소" #: company/models.py:405 msgid "Select company" -msgstr "" +msgstr "회사 선택" #: company/models.py:410 msgid "Address title" -msgstr "" +msgstr "주소 제목" #: company/models.py:411 msgid "Title describing the address entry" -msgstr "" +msgstr "주소 항목을 설명하는 제목" #: company/models.py:417 msgid "Primary address" -msgstr "" +msgstr "기본 주소" #: company/models.py:418 msgid "Set as primary address" -msgstr "" +msgstr "기본 주소로 설정" #: company/models.py:423 msgid "Line 1" -msgstr "" +msgstr "주소 1" #: company/models.py:424 msgid "Address line 1" -msgstr "" +msgstr "주소 1" #: company/models.py:430 msgid "Line 2" -msgstr "" +msgstr "주소 2" #: company/models.py:431 msgid "Address line 2" -msgstr "" +msgstr "주소 2" #: company/models.py:437 company/models.py:438 msgid "Postal code" -msgstr "" +msgstr "우편번호" #: company/models.py:444 msgid "City/Region" -msgstr "" +msgstr "도시/지역" #: company/models.py:445 msgid "Postal code city/region" -msgstr "" +msgstr "우편번호 도시/지역" #: company/models.py:451 msgid "State/Province" -msgstr "" +msgstr "주/도" #: company/models.py:452 msgid "State or province" -msgstr "" +msgstr "주 또는 도" #: company/models.py:458 msgid "Country" -msgstr "" +msgstr "국가" #: company/models.py:459 msgid "Address country" -msgstr "" +msgstr "주소 국가" #: company/models.py:465 msgid "Courier shipping notes" -msgstr "" +msgstr "택배 배송 메모" #: company/models.py:466 msgid "Notes for shipping courier" -msgstr "" +msgstr "택배 배송을 위한 메모" #: company/models.py:472 msgid "Internal shipping notes" -msgstr "" +msgstr "내부 배송 메모" #: company/models.py:473 msgid "Shipping notes for internal use" -msgstr "" +msgstr "내부용 배송 메모" #: company/models.py:480 msgid "Link to address information (external)" -msgstr "" +msgstr "주소 정보 링크(외부)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" -msgstr "" +msgstr "제조사 부품" #: company/models.py:524 company/models.py:764 stock/models.py:1032 #: stock/serializers.py:418 msgid "Base Part" -msgstr "" +msgstr "기본 부품" #: company/models.py:526 company/models.py:766 msgid "Select part" -msgstr "" +msgstr "부품 선택" #: company/models.py:536 msgid "Select manufacturer" -msgstr "" +msgstr "제조사 선택" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" -msgstr "" +msgstr "MPN" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" -msgstr "" +msgstr "제조사 부품 번호" #: company/models.py:550 msgid "URL for external manufacturer part link" -msgstr "" +msgstr "외부 제조사 부품 링크 URL" #: company/models.py:559 msgid "Manufacturer part description" -msgstr "" +msgstr "제조사 부품 설명" #: company/models.py:691 msgid "Pack units must be compatible with the base part units" -msgstr "" +msgstr "포장 단위는 기본 부품 단위와 호환되어야 합니다" #: company/models.py:698 msgid "Pack units must be greater than zero" -msgstr "" +msgstr "포장 단위는 0보다 커야 합니다" #: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" -msgstr "" +msgstr "연결된 제조사 부품은 동일한 기본 부품을 참조해야 합니다" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" -msgstr "" +msgstr "공급업체" #: company/models.py:775 msgid "Select supplier" -msgstr "" +msgstr "공급업체 선택" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" -msgstr "" +msgstr "공급업체 SKU" #: company/models.py:787 msgid "Is this supplier part active?" -msgstr "" +msgstr "이 공급업체 부품이 활성 상태인가요?" #: company/models.py:792 msgid "Primary" -msgstr "" +msgstr "기본" #: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" -msgstr "" +msgstr "연결된 부품의 기본 공급업체 부품인가요?" #: company/models.py:803 msgid "Select manufacturer part" -msgstr "" +msgstr "제조사 부품 선택" #: company/models.py:810 msgid "URL for external supplier part link" -msgstr "" +msgstr "외부 공급업체 부품 링크 URL" #: company/models.py:819 msgid "Supplier part description" -msgstr "" +msgstr "공급업체 부품 설명" #: company/models.py:835 part/models.py:2295 msgid "base cost" -msgstr "" +msgstr "기본 비용" #: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" -msgstr "" +msgstr "최소 요금(예: 보관 수수료)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" -msgstr "" +msgstr "포장" #: company/models.py:844 msgid "Part packaging" -msgstr "" +msgstr "부품 포장" #: company/models.py:849 msgid "Pack Quantity" -msgstr "" +msgstr "포장 수량" #: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." -msgstr "" +msgstr "한 포장에 공급되는 총 수량입니다. 단품인 경우 비워 두세요." #: company/models.py:870 part/models.py:2302 msgid "multiple" -msgstr "" +msgstr "배수" #: company/models.py:871 msgid "Order multiple" -msgstr "" +msgstr "주문 배수" #: company/models.py:883 msgid "Quantity available from supplier" -msgstr "" +msgstr "공급업체에서 제공 가능한 수량" #: company/models.py:889 msgid "Availability Updated" -msgstr "" +msgstr "가용성 업데이트됨" #: company/models.py:890 msgid "Date of last update of availability data" -msgstr "" +msgstr "가용성 데이터의 마지막 업데이트 날짜" #: company/models.py:1018 msgid "Supplier Price Break" -msgstr "" +msgstr "공급업체 가격 구간" #: company/serializers.py:191 msgid "Default currency used for this supplier" -msgstr "" +msgstr "이 공급업체에서 사용하는 기본 통화" #: company/serializers.py:229 msgid "Company Name" -msgstr "" +msgstr "회사명" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" -msgstr "" +msgstr "재고 있음" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" -msgstr "" +msgstr "가격 구간" + +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "표시 이름" #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" -msgstr "" +msgstr "데이터 내보내기 중 오류가 발생했습니다" #: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" -msgstr "" +msgstr "데이터 내보내기 플러그인이 잘못된 데이터 형식을 반환했습니다" #: data_exporter/serializers.py:73 msgid "Export Format" -msgstr "" +msgstr "내보내기 형식" #: data_exporter/serializers.py:74 msgid "Select export file format" -msgstr "" +msgstr "내보내기 파일 형식을 선택하세요" #: data_exporter/serializers.py:81 msgid "Export Plugin" -msgstr "" +msgstr "내보내기 플러그인" #: data_exporter/serializers.py:82 msgid "Select export plugin" -msgstr "" +msgstr "내보내기 플러그인을 선택하세요" #: generic/states/fields.py:146 msgid "Additional status information for this item" -msgstr "" +msgstr "이 항목에 대한 추가 상태 정보" #: generic/states/fields.py:160 msgid "Custom status key" -msgstr "" +msgstr "사용자 정의 상태 키" #: generic/states/serializers.py:26 msgid "Custom" -msgstr "" +msgstr "사용자 정의" #: generic/states/serializers.py:37 msgid "Class" -msgstr "" +msgstr "클래스" #: generic/states/serializers.py:40 msgid "Values" -msgstr "" +msgstr "값" #: generic/states/tests.py:22 order/status_codes.py:13 msgid "Placed" -msgstr "" +msgstr "접수됨" #: generic/states/validators.py:21 msgid "Invalid status code" -msgstr "" +msgstr "잘못된 상태 코드" #: importer/models.py:74 msgid "Data File" -msgstr "" +msgstr "데이터 파일" #: importer/models.py:75 msgid "Data file to import" -msgstr "" +msgstr "가져올 데이터 파일" #: importer/models.py:84 msgid "Columns" -msgstr "" +msgstr "열" #: importer/models.py:91 msgid "Target model type for this import session" -msgstr "" +msgstr "이 가져오기 세션의 대상 모델 유형" #: importer/models.py:97 msgid "Import status" -msgstr "" +msgstr "가져오기 상태" #: importer/models.py:107 msgid "Field Defaults" -msgstr "" +msgstr "필드 기본값" #: importer/models.py:114 msgid "Field Overrides" -msgstr "" +msgstr "필드 재정의" #: importer/models.py:121 msgid "Field Filters" -msgstr "" +msgstr "필드 필터" #: importer/models.py:127 msgid "Update Existing Records" -msgstr "" +msgstr "기존 레코드 업데이트" #: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" -msgstr "" +msgstr "활성화하면 기존 레코드가 새 데이터로 업데이트됩니다" #: importer/models.py:281 msgid "Some required fields have not been mapped" -msgstr "" +msgstr "일부 필수 필드가 매핑되지 않았습니다" #: importer/models.py:388 msgid "ID" -msgstr "" +msgstr "ID" #: importer/models.py:389 msgid "Existing database identifier for the record" -msgstr "" +msgstr "레코드의 기존 데이터베이스 식별자" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" -msgstr "" +msgstr "열이 이미 데이터베이스 필드에 매핑되어 있습니다" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" -msgstr "" +msgstr "필드가 이미 데이터 열에 매핑되어 있습니다" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:471 -msgid "Column does not exist in the data file" -msgstr "" +msgstr "열 매핑은 유효한 가져오기 세션에 연결되어야 합니다" #: importer/models.py:478 +msgid "Column does not exist in the data file" +msgstr "데이터 파일에 해당 열이 없습니다" + +#: importer/models.py:485 msgid "Field does not exist in the target model" -msgstr "" +msgstr "대상 모델에 해당 필드가 없습니다" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" -msgstr "" +msgstr "선택한 필드는 읽기 전용입니다" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" -msgstr "" +msgstr "가져오기 세션" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" -msgstr "" +msgstr "필드" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" -msgstr "" +msgstr "열" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" -msgstr "" +msgstr "행 인덱스" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" -msgstr "" +msgstr "원본 행 데이터" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" -msgstr "" +msgstr "오류" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" -msgstr "" - -#: importer/models.py:839 -msgid "ID is required for updating existing records." -msgstr "" +msgstr "유효" #: importer/models.py:846 -msgid "No record found with the provided ID" -msgstr "" +msgid "ID is required for updating existing records." +msgstr "기존 레코드를 업데이트하려면 ID가 필요합니다." -#: importer/models.py:852 +#: importer/models.py:853 +msgid "No record found with the provided ID" +msgstr "제공된 ID로 레코드를 찾을 수 없습니다" + +#: importer/models.py:859 msgid "Invalid ID format provided" -msgstr "" +msgstr "잘못된 ID 형식이 제공되었습니다" #: importer/operations.py:31 importer/operations.py:52 msgid "Unsupported data file format" -msgstr "" +msgstr "지원되지 않는 데이터 파일 형식" #: importer/operations.py:43 msgid "Failed to open data file" -msgstr "" +msgstr "데이터 파일을 열지 못했습니다" #: importer/operations.py:54 msgid "Invalid data file dimensions" -msgstr "" +msgstr "잘못된 데이터 파일 크기입니다" #: importer/serializers.py:92 msgid "Invalid field defaults" -msgstr "" +msgstr "잘못된 필드 기본값" #: importer/serializers.py:105 msgid "Invalid field overrides" -msgstr "" +msgstr "잘못된 필드 재정의" #: importer/serializers.py:118 msgid "Invalid field filters" -msgstr "" +msgstr "잘못된 필드 필터" #: importer/serializers.py:177 msgid "Rows" -msgstr "" +msgstr "행" #: importer/serializers.py:178 msgid "List of row IDs to accept" -msgstr "" +msgstr "승인할 행 ID 목록" #: importer/serializers.py:191 msgid "No rows provided" -msgstr "" +msgstr "제공된 행이 없습니다" #: importer/serializers.py:195 msgid "Row does not belong to this session" -msgstr "" +msgstr "행이 이 세션에 속하지 않습니다" #: importer/serializers.py:198 msgid "Row contains invalid data" -msgstr "" +msgstr "행에 잘못된 데이터가 포함되어 있습니다" #: importer/serializers.py:201 msgid "Row has already been completed" -msgstr "" +msgstr "행이 이미 완료되었습니다" #: importer/status_codes.py:13 msgid "Initializing" -msgstr "" +msgstr "초기화 중" #: importer/status_codes.py:18 msgid "Mapping Columns" -msgstr "" +msgstr "열 매핑 중" #: importer/status_codes.py:21 msgid "Importing Data" -msgstr "" +msgstr "데이터 가져오는 중" #: importer/status_codes.py:24 msgid "Processing Data" -msgstr "" +msgstr "데이터 처리 중" #: importer/validators.py:21 msgid "Data file exceeds maximum size limit" -msgstr "" +msgstr "데이터 파일이 최대 크기 제한을 초과합니다" #: importer/validators.py:26 msgid "Data file contains no headers" -msgstr "" +msgstr "데이터 파일에 헤더가 없습니다" #: importer/validators.py:29 msgid "Data file contains too many columns" -msgstr "" +msgstr "데이터 파일에 열이 너무 많습니다" #: importer/validators.py:32 msgid "Data file contains too many rows" -msgstr "" +msgstr "데이터 파일에 행이 너무 많습니다" #: importer/validators.py:53 msgid "Value must be a valid dictionary object" -msgstr "" +msgstr "값은 유효한 사전(dictionary) 객체여야 합니다" #: machine/machine_types/label_printer.py:212 msgid "Copies" -msgstr "" +msgstr "복사본" #: machine/machine_types/label_printer.py:213 msgid "Number of copies to print for each label" -msgstr "" +msgstr "각 라벨에 대해 인쇄할 복사본 수" #: machine/machine_types/label_printer.py:231 msgid "Connected" -msgstr "" +msgstr "연결됨" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" -msgstr "" +msgstr "알 수 없음" #: machine/machine_types/label_printer.py:233 msgid "Printing" -msgstr "" +msgstr "인쇄 중" #: machine/machine_types/label_printer.py:234 msgid "Warning" -msgstr "" +msgstr "경고" #: machine/machine_types/label_printer.py:235 msgid "No media" -msgstr "" +msgstr "미디어 없음" #: machine/machine_types/label_printer.py:236 msgid "Paper jam" -msgstr "" +msgstr "용지 걸림" #: machine/machine_types/label_printer.py:237 msgid "Disconnected" -msgstr "" +msgstr "연결 끊김" #: machine/machine_types/label_printer.py:238 msgid "Error" -msgstr "" +msgstr "오류" #: machine/machine_types/label_printer.py:245 msgid "Label Printer" -msgstr "" +msgstr "라벨 프린터" #: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." -msgstr "" +msgstr "다양한 항목의 라벨을 직접 인쇄합니다." #: machine/machine_types/label_printer.py:252 msgid "Printer Location" -msgstr "" +msgstr "프린터 위치" #: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" -msgstr "" +msgstr "프린터 범위를 특정 위치로 제한합니다" #: machine/models.py:26 msgid "Name of machine" -msgstr "" +msgstr "장비 이름" #: machine/models.py:30 msgid "Machine Type" -msgstr "" +msgstr "장비 유형" #: machine/models.py:30 msgid "Type of machine" -msgstr "" +msgstr "장비의 유형" #: machine/models.py:35 machine/models.py:147 msgid "Driver" -msgstr "" +msgstr "드라이버" #: machine/models.py:36 msgid "Driver used for the machine" -msgstr "" +msgstr "장비에 사용되는 드라이버" #: machine/models.py:40 msgid "Machines can be disabled" -msgstr "" +msgstr "장비를 비활성화할 수 있습니다" #: machine/models.py:96 msgid "Driver available" -msgstr "" +msgstr "사용 가능한 드라이버" #: machine/models.py:101 msgid "No errors" -msgstr "" +msgstr "오류 없음" #: machine/models.py:106 msgid "Initialized" -msgstr "" +msgstr "초기화됨" #: machine/models.py:118 msgid "Machine status" -msgstr "" +msgstr "장비 상태" #: machine/models.py:146 msgid "Machine" -msgstr "" +msgstr "장비" #: machine/models.py:158 msgid "Machine Config" -msgstr "" +msgstr "장비 구성" #: machine/models.py:163 msgid "Config type" -msgstr "" +msgstr "구성 유형" #: machine/serializers.py:24 msgid "Key of the property" -msgstr "" +msgstr "속성 키" #: machine/serializers.py:27 msgid "Value of the property" -msgstr "" +msgstr "속성 값" #: machine/serializers.py:30 users/models.py:238 msgid "Group" -msgstr "" +msgstr "그룹" #: machine/serializers.py:30 msgid "Grouping of the property" -msgstr "" +msgstr "속성 그룹" #: machine/serializers.py:33 msgid "Type" -msgstr "" +msgstr "유형" #: machine/serializers.py:35 msgid "Type of the property" -msgstr "" +msgstr "속성의 유형" #: machine/serializers.py:40 msgid "Max Progress" -msgstr "" +msgstr "최대 진행도" #: machine/serializers.py:41 msgid "Maximum value for progress type, required if type=progress" -msgstr "" +msgstr "진행도 유형의 최대값( type=progress 인 경우 필수)" #: order/api.py:128 msgid "Order Reference" -msgstr "" +msgstr "주문 참조" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" -msgstr "" +msgstr "미결" #: order/api.py:172 msgid "Has Project Code" -msgstr "" +msgstr "프로젝트 코드 있음" #: order/api.py:186 order/models.py:493 msgid "Created By" -msgstr "" +msgstr "생성자" #: order/api.py:190 msgid "Created Before" -msgstr "" +msgstr "이전 생성" #: order/api.py:194 msgid "Created After" -msgstr "" +msgstr "이후 생성" #: order/api.py:198 msgid "Has Start Date" -msgstr "" +msgstr "시작일 있음" #: order/api.py:206 msgid "Start Date Before" -msgstr "" +msgstr "시작일 이전" #: order/api.py:210 msgid "Start Date After" -msgstr "" +msgstr "시작일 이후" #: order/api.py:214 msgid "Has Target Date" -msgstr "" +msgstr "목표일 있음" #: order/api.py:222 msgid "Target Date Before" -msgstr "" +msgstr "목표일 이전" #: order/api.py:226 msgid "Target Date After" -msgstr "" +msgstr "목표일 이후" #: order/api.py:230 msgid "Updated Before" -msgstr "" +msgstr "이전 업데이트" #: order/api.py:234 msgid "Updated After" -msgstr "" +msgstr "이후 업데이트" #: order/api.py:285 msgid "Has Pricing" -msgstr "" +msgstr "가격 정보 있음" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" -msgstr "" +msgstr "완료일 이전" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" -msgstr "" +msgstr "완료일 이후" #: order/api.py:348 order/api.py:352 msgid "External Build Order" -msgstr "" +msgstr "외주 생산 작업 지시서" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" -msgstr "" +msgstr "주문" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" -msgstr "" +msgstr "주문 완료" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" -msgstr "" +msgstr "내부 부품" #: order/api.py:595 msgid "Order Pending" -msgstr "" +msgstr "주문 대기" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" -msgstr "" +msgstr "완료됨" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" -msgstr "" +msgstr "배송 있음" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" -msgstr "" +msgstr "배송을 찾을 수 없습니다" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" -msgstr "" +msgstr "구매 주문" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 #: templates/email/overdue_sales_order.html:15 msgid "Sales Order" -msgstr "" +msgstr "판매 주문" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" -msgstr "" +msgstr "반품 주문" #: order/models.py:90 #: report/templates/report/inventree_purchase_order_report.html:38 #: report/templates/report/inventree_sales_order_report.html:31 msgid "Total Price" -msgstr "" +msgstr "총액" #: order/models.py:91 msgid "Total price for this order" -msgstr "" +msgstr "이 주문의 총액" #: order/models.py:96 order/serializers.py:61 msgid "Order Currency" -msgstr "" +msgstr "주문 통화" #: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" -msgstr "" +msgstr "이 주문의 통화(비워 두면 회사 기본값 사용)" #: order/models.py:326 msgid "This order is locked and cannot be modified" -msgstr "" +msgstr "이 주문은 잠겨 있어 수정할 수 없습니다" #: order/models.py:380 msgid "Contact does not match selected company" -msgstr "" +msgstr "담당자가 선택한 회사와 일치하지 않습니다" #: order/models.py:387 msgid "Start date must be before target date" -msgstr "" +msgstr "시작일은 목표일보다 이전이어야 합니다" #: order/models.py:394 msgid "Address does not match selected company" -msgstr "" +msgstr "주소가 선택한 회사와 일치하지 않습니다" #: order/models.py:448 msgid "Order description (optional)" -msgstr "" +msgstr "주문 설명(선택 사항)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" -msgstr "" +msgstr "이 주문의 프로젝트 코드를 선택하세요" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" -msgstr "" +msgstr "외부 페이지 링크" #: order/models.py:470 msgid "Start date" -msgstr "" +msgstr "시작일" #: order/models.py:471 msgid "Scheduled start date for this order" -msgstr "" +msgstr "이 주문의 예정 시작일" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" -msgstr "" +msgstr "목표일" #: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." -msgstr "" +msgstr "주문 배송 예상일입니다. 이 날짜 이후에는 주문이 기한 초과로 표시됩니다." #: order/models.py:499 msgid "Issue Date" -msgstr "" +msgstr "발행일" #: order/models.py:500 msgid "Date order was issued" -msgstr "" +msgstr "주문이 발행된 날짜" #: order/models.py:506 msgid "Updated At" -msgstr "" +msgstr "업데이트 일시" #: order/models.py:515 msgid "User or group responsible for this order" -msgstr "" +msgstr "이 주문을 담당하는 사용자 또는 그룹" #: order/models.py:526 msgid "Point of contact for this order" -msgstr "" +msgstr "이 주문의 연락 담당자" #: order/models.py:536 msgid "Company address for this order" -msgstr "" +msgstr "이 주문의 회사 주소" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" -msgstr "" +msgstr "주문 참조" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" -msgstr "" +msgstr "상태" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" -msgstr "" +msgstr "구매 주문 상태" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" -msgstr "" +msgstr "품목을 주문하는 공급업체" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" -msgstr "" +msgstr "공급업체 참조" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" -msgstr "" +msgstr "공급업체 주문 참조 코드" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" -msgstr "" +msgstr "수령자" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" -msgstr "" +msgstr "주문이 완료된 날짜" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" -msgstr "" +msgstr "목적지" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" -msgstr "" +msgstr "수령된 품목의 목적지" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" -msgstr "" +msgstr "부품 공급업체는 구매 주문 공급업체와 일치해야 합니다" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" -msgstr "" +msgstr "라인 항목이 구매 주문과 일치하지 않습니다" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" -msgstr "" +msgstr "라인 항목에 연결된 부품이 없습니다" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" -msgstr "" +msgstr "수량은 양수여야 합니다" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" -msgstr "" +msgstr "가상 부품에는 일련번호를 할당할 수 없습니다" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" -msgstr "" - -#: order/models.py:1350 -msgid "Company to which the items are being sold" -msgstr "" +msgstr "고객" #: order/models.py:1363 +msgid "Company to which the items are being sold" +msgstr "품목을 판매하는 대상 회사" + +#: order/models.py:1376 msgid "Sales order status" -msgstr "" +msgstr "판매 주문 상태" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " -msgstr "" +msgstr "고객 참조" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" -msgstr "" +msgstr "고객 주문 참조 코드" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" -msgstr "" +msgstr "발송일" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" -msgstr "" +msgstr "발송자" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" -msgstr "" - -#: order/models.py:1442 -msgid "Order is already cancelled" -msgstr "" - -#: order/models.py:1446 -msgid "Only an open order can be marked as complete" -msgstr "" - -#: order/models.py:1450 -msgid "Order cannot be completed as there are incomplete shipments" -msgstr "" +msgstr "주문이 이미 완료되었습니다" #: order/models.py:1455 +msgid "Order is already cancelled" +msgstr "주문이 이미 취소되었습니다" + +#: order/models.py:1459 +msgid "Only an open order can be marked as complete" +msgstr "열린 주문만 완료로 표시할 수 있습니다" + +#: order/models.py:1463 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "미완료 발송이 있어 주문을 완료할 수 없습니다" + +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" -msgstr "" +msgstr "미완료 할당이 있어 주문을 완료할 수 없습니다" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" -msgstr "" +msgstr "미완료 라인 항목이 있어 주문을 완료할 수 없습니다" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" -msgstr "" +msgstr "이 주문은 잠겨 있어 수정할 수 없습니다" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" -msgstr "" +msgstr "품목 수량" -#: order/models.py:1800 -msgid "Line item reference" -msgstr "" +#: order/models.py:1814 +msgid "Line Number" +msgstr "라인 번호" -#: order/models.py:1807 -msgid "Line item notes" -msgstr "" +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "이 항목의 라인 번호(선택)" #: order/models.py:1822 +msgid "Line item reference" +msgstr "라인 항목 참조" + +#: order/models.py:1829 +msgid "Line item notes" +msgstr "라인 항목 메모" + +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" -msgstr "" +msgstr "이 라인 항목의 목표일(비워 두면 주문의 목표일을 사용)" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" -msgstr "" +msgstr "라인 항목 설명(선택)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" -msgstr "" +msgstr "이 라인의 추가 정보" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" -msgstr "" +msgstr "단가" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" -msgstr "" +msgstr "구매 주문 라인 항목" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" -msgstr "" +msgstr "공급업체 부품은 공급업체와 일치해야 합니다" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" -msgstr "" +msgstr "빌드 주문은 외부로 표시되어야 합니다" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" -msgstr "" +msgstr "빌드 주문은 조립 부품에만 연결할 수 있습니다" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" -msgstr "" +msgstr "빌드 주문 부품은 라인 항목 부품과 일치해야 합니다" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" -msgstr "" +msgstr "공급업체 부품" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" -msgstr "" +msgstr "수령됨" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" -msgstr "" +msgstr "수령된 품목 수" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" -msgstr "" +msgstr "구매 가격" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" -msgstr "" +msgstr "단위 구매 가격" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" -msgstr "" +msgstr "이 라인 항목으로 이행할 외주 생산 작업 지시서" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" -msgstr "" +msgstr "구매 주문 추가 라인" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" -msgstr "" +msgstr "판매 주문 라인 항목" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" -msgstr "" +msgstr "판매 가능한 부품만 판매 주문에 할당할 수 있습니다" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" -msgstr "" +msgstr "판매 가격" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" -msgstr "" +msgstr "단위 판매 가격" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" -msgstr "" +msgstr "발송됨" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" -msgstr "" +msgstr "발송 수량" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" -msgstr "" +msgstr "판매 주문 발송" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" -msgstr "" +msgstr "발송 주소는 고객과 일치해야 합니다" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" -msgstr "" +msgstr "이 발송의 배송지 주소" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" -msgstr "" +msgstr "발송 날짜" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" -msgstr "" +msgstr "배송일" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" -msgstr "" +msgstr "발송물 배송 날짜" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" -msgstr "" +msgstr "확인자" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" -msgstr "" +msgstr "이 발송을 확인한 사용자" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" -msgstr "" +msgstr "발송" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" -msgstr "" +msgstr "발송 번호" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" -msgstr "" +msgstr "운송장 번호" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" -msgstr "" +msgstr "발송 추적 정보" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" -msgstr "" +msgstr "송장 번호" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" -msgstr "" +msgstr "연결된 송장의 참조 번호" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" -msgstr "" +msgstr "발송이 이미 전송되었습니다" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" -msgstr "" +msgstr "발송에 할당된 재고 품목이 없습니다" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" -msgstr "" - -#: order/models.py:2487 -msgid "Sales Order Extra Line" -msgstr "" +msgstr "발송은 완료하기 전에 확인되어야 합니다" #: order/models.py:2516 +msgid "Sales Order Extra Line" +msgstr "판매 주문 추가 라인" + +#: order/models.py:2545 msgid "Sales Order Allocation" -msgstr "" +msgstr "판매 주문 할당" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" -msgstr "" +msgstr "재고 품목이 할당되지 않았습니다" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" -msgstr "" +msgstr "부품이 다른 라인에 재고 품목을 할당할 수 없습니다" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" -msgstr "" +msgstr "부품이 없는 라인에는 재고를 할당할 수 없습니다" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" -msgstr "" +msgstr "할당 수량은 재고 수량을 초과할 수 없습니다" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" -msgstr "" +msgstr "할당 수량은 0보다 커야 합니다" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" -msgstr "" +msgstr "일련번호가 있는 재고 품목의 수량은 1이어야 합니다" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" -msgstr "" +msgstr "판매 주문이 발송과 일치하지 않습니다" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" -msgstr "" +msgstr "발송이 판매 주문과 일치하지 않습니다" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" -msgstr "" +msgstr "라인" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" -msgstr "" +msgstr "판매 주문 발송 참조" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" -msgstr "" +msgstr "품목" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" -msgstr "" +msgstr "할당할 재고 품목을 선택하세요" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" -msgstr "" +msgstr "재고 할당 수량을 입력하세요" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" -msgstr "" +msgstr "반품 주문 참조" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" -msgstr "" +msgstr "품목이 반품되는 회사" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" -msgstr "" +msgstr "반품 주문 상태" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" -msgstr "" +msgstr "반품 주문 라인 항목" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" -msgstr "" +msgstr "재고 품목을 지정해야 합니다" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" -msgstr "" +msgstr "반품 수량이 재고 수량을 초과합니다" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" -msgstr "" +msgstr "반품 수량은 0보다 커야 합니다" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" -msgstr "" - -#: order/models.py:3036 -msgid "Select item to return from customer" -msgstr "" - -#: order/models.py:3051 -msgid "Received Date" -msgstr "" - -#: order/models.py:3052 -msgid "The date this return item was received" -msgstr "" - -#: order/models.py:3064 -msgid "Outcome" -msgstr "" +msgstr "일련번호가 있는 재고 품목에 대한 수량이 올바르지 않습니다" #: order/models.py:3065 +msgid "Select item to return from customer" +msgstr "고객에게서 반품받을 품목을 선택하세요" + +#: order/models.py:3080 +msgid "Received Date" +msgstr "수령일" + +#: order/models.py:3081 +msgid "The date this return item was received" +msgstr "이 반품 품목을 수령한 날짜" + +#: order/models.py:3093 +msgid "Outcome" +msgstr "결과" + +#: order/models.py:3094 msgid "Outcome for this line item" -msgstr "" +msgstr "이 라인 항목의 결과" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" -msgstr "" +msgstr "이 라인 항목의 반품 또는 수리에 관련된 비용" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" -msgstr "" +msgstr "반품 주문 추가 라인" #: order/serializers.py:75 msgid "Order ID" -msgstr "" +msgstr "주문 ID" #: order/serializers.py:75 msgid "ID of the order to duplicate" -msgstr "" +msgstr "복제할 주문의 ID" #: order/serializers.py:81 msgid "Copy Lines" -msgstr "" +msgstr "라인 복사" #: order/serializers.py:82 msgid "Copy line items from the original order" -msgstr "" +msgstr "원본 주문에서 라인 항목을 복사" #: order/serializers.py:88 msgid "Copy Extra Lines" -msgstr "" +msgstr "추가 라인 복사" #: order/serializers.py:89 msgid "Copy extra line items from the original order" -msgstr "" +msgstr "원본 주문에서 추가 라인 항목을 복사" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" -msgstr "" +msgstr "매개변수 복사" #: order/serializers.py:96 msgid "Copy order parameters from the original order" -msgstr "" +msgstr "원본 주문에서 주문 매개변수를 복사" #: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" -msgstr "" +msgstr "라인 항목" #: order/serializers.py:116 msgid "Completed Lines" -msgstr "" +msgstr "완료된 라인" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" -msgstr "" +msgstr "주문 복제" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" -msgstr "" +msgstr "이 주문을 복제하기 위한 옵션을 지정하세요" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" -msgstr "" +msgstr "유효하지 않은 주문 ID" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" -msgstr "" +msgstr "공급업체 이름" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" -msgstr "" +msgstr "주문을 취소할 수 없습니다" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" -msgstr "" +msgstr "미완료 라인 항목이 있어도 주문을 종료할 수 있도록 허용" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" -msgstr "" +msgstr "주문에 미완료 라인 항목이 있습니다" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" -msgstr "" +msgstr "주문이 열려 있지 않습니다" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" -msgstr "" +msgstr "자동 가격 책정" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" -msgstr "" +msgstr "공급업체 부품 데이터를 기반으로 구매 가격을 자동으로 계산" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" -msgstr "" +msgstr "구매 가격 통화" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" -msgstr "" +msgstr "항목 병합" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" -msgstr "" +msgstr "부품, 목적지, 목표일이 같은 항목을 하나의 라인 항목으로 병합" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" -msgstr "" +msgstr "SKU" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" -msgstr "" +msgstr "내부 부품 번호" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" -msgstr "" +msgstr "내부 부품 이름" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" -msgstr "" +msgstr "공급업체 부품을 지정해야 합니다" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" -msgstr "" +msgstr "구매 주문을 지정해야 합니다" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" -msgstr "" +msgstr "공급업체는 구매 주문과 일치해야 합니다" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" -msgstr "" +msgstr "구매 주문은 공급업체와 일치해야 합니다" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" -msgstr "" +msgstr "라인 항목" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" -msgstr "" +msgstr "수령 품목의 목적지 위치를 선택하세요" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" -msgstr "" +msgstr "입고 재고 품목의 배치 코드를 입력하세요" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" -msgstr "" +msgstr "만료일" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" -msgstr "" +msgstr "입고 재고 품목의 만료일을 입력하세요" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" -msgstr "" +msgstr "입고 재고 품목의 일련번호를 입력하세요" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" -msgstr "" +msgstr "입고 재고 품목의 포장 정보를 재정의" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" -msgstr "" +msgstr "입고 재고 품목에 대한 추가 메모" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" -msgstr "" +msgstr "바코드" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" -msgstr "" +msgstr "스캔된 바코드" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" -msgstr "" +msgstr "바코드가 이미 사용 중입니다" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" -msgstr "" +msgstr "라인 항목을 제공해야 합니다" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" -msgstr "" +msgstr "목적지 위치를 지정해야 합니다" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" -msgstr "" +msgstr "제공된 바코드 값은 고유해야 합니다" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" -msgstr "" +msgstr "발송" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" -msgstr "" +msgstr "완료된 발송" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" -msgstr "" +msgstr "할당된 라인" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" -msgstr "" +msgstr "판매 가격 통화" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" -msgstr "" +msgstr "할당된 품목" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" -msgstr "" +msgstr "발송 세부 정보가 제공되지 않았습니다" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" -msgstr "" +msgstr "라인 항목이 이 주문과 연결되어 있지 않습니다" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" -msgstr "" +msgstr "수량은 양수여야 합니다" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" -msgstr "" +msgstr "할당할 일련번호를 입력하세요" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" -msgstr "" +msgstr "발송이 이미 발송되었습니다" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" -msgstr "" +msgstr "발송이 이 주문과 연결되어 있지 않습니다" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" -msgstr "" +msgstr "다음 일련번호에 대한 일치 항목을 찾을 수 없습니다" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" -msgstr "" +msgstr "다음 일련번호는 사용할 수 없습니다" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" -msgstr "" +msgstr "반품 주문 라인 항목" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" -msgstr "" +msgstr "라인 항목이 반품 주문과 일치하지 않습니다" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" -msgstr "" +msgstr "라인 항목이 이미 수령되었습니다" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" -msgstr "" +msgstr "진행 중인 주문에 대해서만 품목을 수령할 수 있습니다" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" -msgstr "" +msgstr "반품 수량" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" -msgstr "" +msgstr "라인 가격 통화" #: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16 msgid "Lost" -msgstr "" +msgstr "분실" #: order/status_codes.py:18 order/status_codes.py:55 stock/status_codes.py:24 msgid "Returned" -msgstr "" +msgstr "반품됨" #: order/status_codes.py:47 order/status_codes.py:79 msgid "In Progress" -msgstr "" +msgstr "진행 중" #: order/status_codes.py:105 msgid "Return" -msgstr "" +msgstr "반품" #: order/status_codes.py:108 msgid "Repair" -msgstr "" +msgstr "수리" #: order/status_codes.py:111 msgid "Replace" -msgstr "" +msgstr "교체" #: order/status_codes.py:114 msgid "Refund" -msgstr "" +msgstr "환불" #: order/status_codes.py:117 msgid "Reject" -msgstr "" +msgstr "거부" #: order/tasks.py:48 msgid "Overdue Purchase Order" -msgstr "" +msgstr "기한 초과 구매 주문" #: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" -msgstr "" +msgstr "구매 주문 {po}가 이제 기한을 초과했습니다" #: order/tasks.py:118 msgid "Overdue Sales Order" -msgstr "" +msgstr "기한 초과 판매 주문" #: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" -msgstr "" +msgstr "판매 주문 {so}가 이제 기한을 초과했습니다" #: order/tasks.py:185 msgid "Overdue Return Order" -msgstr "" +msgstr "기한 초과 반품 주문" #: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" -msgstr "" +msgstr "반품 주문 {ro}가 이제 기한을 초과했습니다" #: part/api.py:88 msgid "Starred" -msgstr "" +msgstr "즐겨찾기" #: part/api.py:90 msgid "Filter by starred categories" -msgstr "" +msgstr "즐겨찾기 카테고리로 필터" #: part/api.py:107 stock/api.py:287 msgid "Depth" -msgstr "" +msgstr "깊이" #: part/api.py:107 msgid "Filter by category depth" -msgstr "" +msgstr "카테고리 깊이로 필터" #: part/api.py:125 stock/api.py:305 msgid "Top Level" -msgstr "" +msgstr "최상위" #: part/api.py:127 msgid "Filter by top-level categories" -msgstr "" +msgstr "최상위 카테고리로 필터" #: part/api.py:140 stock/api.py:320 msgid "Cascade" -msgstr "" +msgstr "계층 포함" #: part/api.py:142 msgid "Include sub-categories in filtered results" -msgstr "" +msgstr "필터 결과에 하위 카테고리를 포함" #: part/api.py:162 msgid "Parent" -msgstr "" +msgstr "상위" #: part/api.py:164 msgid "Filter by parent category" -msgstr "" +msgstr "상위 카테고리로 필터" #: part/api.py:199 msgid "Exclude sub-categories under the specified category" -msgstr "" +msgstr "지정된 카테고리 아래의 하위 카테고리를 제외" #: part/api.py:424 msgid "Has Results" -msgstr "" +msgstr "결과 있음" #: part/api.py:653 msgid "Is Variant" -msgstr "" +msgstr "변형 여부" #: part/api.py:661 msgid "Is Revision" -msgstr "" +msgstr "리비전 여부" #: part/api.py:671 msgid "Has Revisions" -msgstr "" +msgstr "리비전 있음" #: part/api.py:852 msgid "BOM Valid" -msgstr "" +msgstr "BOM 유효" #: part/api.py:961 msgid "Cascade Categories" -msgstr "" +msgstr "카테고리 계층 포함" #: part/api.py:962 msgid "If true, include items in child categories of the given category" -msgstr "" +msgstr "참이면 지정된 카테고리의 하위 카테고리에 있는 항목을 포함합니다" #: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" -msgstr "" +msgstr "숫자 카테고리 ID 또는 'null' 값으로 필터" #: part/api.py:1280 msgid "Assembly part is active" -msgstr "" +msgstr "조립 부품이 활성 상태" #: part/api.py:1284 msgid "Assembly part is trackable" -msgstr "" +msgstr "조립 부품을 추적할 수 있음" #: part/api.py:1288 msgid "Assembly part is testable" -msgstr "" +msgstr "조립 부품을 테스트할 수 있음" #: part/api.py:1293 msgid "Component part is active" -msgstr "" +msgstr "구성 부품이 활성 상태" #: part/api.py:1297 msgid "Component part is trackable" -msgstr "" +msgstr "구성 부품을 추적할 수 있음" #: part/api.py:1301 msgid "Component part is testable" -msgstr "" +msgstr "구성 부품을 테스트할 수 있음" #: part/api.py:1305 msgid "Component part is an assembly" -msgstr "" +msgstr "구성 부품이 조립품임" #: part/api.py:1309 msgid "Component part is virtual" -msgstr "" +msgstr "구성 부품이 가상 부품임" #: part/api.py:1313 msgid "Has available stock" -msgstr "" +msgstr "사용 가능한 재고 있음" #: part/api.py:1370 msgid "Uses" -msgstr "" +msgstr "사용" #: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" -msgstr "" +msgstr "부품 카테고리" #: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" -msgstr "" +msgstr "부품 카테고리" #: part/models.py:111 part/models.py:1187 msgid "Default Location" -msgstr "" +msgstr "기본 위치" #: part/models.py:112 msgid "Default location for parts in this category" -msgstr "" +msgstr "이 카테고리의 부품 기본 위치" #: part/models.py:117 stock/models.py:204 msgid "Structural" -msgstr "" +msgstr "구조적" #: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" +msgstr "부품은 구조 카테고리에 직접 할당할 수 없지만, 하위 카테고리에 할당할 수 있습니다." #: part/models.py:128 msgid "Default keywords" -msgstr "" +msgstr "기본 키워드" #: part/models.py:129 msgid "Default keywords for parts in this category" -msgstr "" +msgstr "이 카테고리의 부품 기본 키워드" #: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" -msgstr "" +msgstr "아이콘" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" -msgstr "" +msgstr "아이콘(선택)" #: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" +msgstr "일부 부품이 이미 이 카테고리에 할당되어 있어 이 부품 카테고리를 구조적으로 만들 수 없습니다!" #: part/models.py:369 msgid "Part Category Parameter Template" -msgstr "" +msgstr "부품 카테고리 매개변수 템플릿" #: part/models.py:425 msgid "Default Value" -msgstr "" +msgstr "기본값" #: part/models.py:426 msgid "Default Parameter Value" -msgstr "" +msgstr "기본 매개변수 값" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" -msgstr "" +msgstr "부품" #: part/models.py:574 msgid "Cannot delete parameters of a locked part" -msgstr "" +msgstr "잠긴 부품의 매개변수는 삭제할 수 없습니다" #: part/models.py:579 msgid "Cannot modify parameters of a locked part" -msgstr "" +msgstr "잠긴 부품의 매개변수는 수정할 수 없습니다" #: part/models.py:590 msgid "Cannot delete this part as it is locked" -msgstr "" +msgstr "잠겨 있어 이 부품을 삭제할 수 없습니다" #: part/models.py:593 msgid "Cannot delete this part as it is still active" -msgstr "" +msgstr "여전히 활성 상태라 이 부품을 삭제할 수 없습니다" #: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" -msgstr "" +msgstr "조립품에 사용 중이라 이 부품을 삭제할 수 없습니다" #: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" -msgstr "" +msgstr "부품 '{self}'은(는) '{parent}'의 BOM에 사용할 수 없습니다(순환 참조)" #: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" -msgstr "" +msgstr "부품 '{parent}'이(가) '{self}'의 BOM에 사용되고 있습니다(순환 참조)" #: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" -msgstr "" +msgstr "IPN은 정규식 패턴 {pattern}과 일치해야 합니다" #: part/models.py:776 msgid "Part cannot be a revision of itself" -msgstr "" +msgstr "부품은 자기 자신의 개정이 될 수 없습니다" #: part/models.py:783 msgid "Revision code must be specified for a part marked as a revision" -msgstr "" +msgstr "개정으로 표시된 부품에는 개정 코드가 지정되어야 합니다" #: part/models.py:791 msgid "Revisions are only allowed for assembly parts" -msgstr "" +msgstr "개정은 조립 부품에만 허용됩니다" #: part/models.py:798 msgid "Cannot make a revision of a template part" -msgstr "" +msgstr "템플릿 부품의 개정을 만들 수 없습니다" #: part/models.py:804 msgid "Parent part must point to the same template" -msgstr "" +msgstr "상위 부품은 동일한 템플릿을 가리켜야 합니다" #: part/models.py:901 msgid "Stock item with this serial number already exists" -msgstr "" +msgstr "이 일련번호의 재고 항목이 이미 존재합니다" #: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" -msgstr "" +msgstr "부품 설정에서 중복 IPN은 허용되지 않습니다" #: part/models.py:1044 msgid "Duplicate part revision already exists." -msgstr "" +msgstr "중복된 부품 개정이 이미 존재합니다." #: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." -msgstr "" +msgstr "이 이름, IPN 및 개정의 부품이 이미 존재합니다." #: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" -msgstr "" +msgstr "부품은 구조 부품 카테고리에 할당할 수 없습니다!" #: part/models.py:1101 msgid "Part name" -msgstr "" +msgstr "부품 이름" #: part/models.py:1106 msgid "Is Template" -msgstr "" +msgstr "템플릿 여부" #: part/models.py:1107 msgid "Is this part a template part?" -msgstr "" +msgstr "이 부품은 템플릿 부품인가요?" #: part/models.py:1117 msgid "Is this part a variant of another part?" -msgstr "" +msgstr "이 부품은 다른 부품의 변형(Variant)인가요?" #: part/models.py:1118 msgid "Variant Of" -msgstr "" +msgstr "변형 대상" #: part/models.py:1125 msgid "Part description (optional)" -msgstr "" +msgstr "부품 설명(선택)" #: part/models.py:1132 msgid "Keywords" -msgstr "" +msgstr "키워드" #: part/models.py:1133 msgid "Part keywords to improve visibility in search results" -msgstr "" +msgstr "검색 결과에서 가시성을 높이기 위한 부품 키워드" #: part/models.py:1143 msgid "Part category" -msgstr "" +msgstr "부품 카테고리" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" -msgstr "" +msgstr "IPN" #: part/models.py:1158 msgid "Part revision or version number" -msgstr "" +msgstr "부품 개정 또는 버전 번호" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" -msgstr "" +msgstr "개정" #: part/models.py:1168 msgid "Is this part a revision of another part?" -msgstr "" +msgstr "이 부품은 다른 부품의 개정인가요?" #: part/models.py:1169 msgid "Revision Of" -msgstr "" +msgstr "개정 대상" #: part/models.py:1185 msgid "Where is this item normally stored?" -msgstr "" +msgstr "이 항목은 보통 어디에 보관되나요?" #: part/models.py:1222 msgid "Default Expiry" -msgstr "" +msgstr "기본 만료" #: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" -msgstr "" +msgstr "이 부품의 재고 항목 만료 기간(일)" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" -msgstr "" +msgstr "최소 재고" #: part/models.py:1232 msgid "Minimum allowed stock level" -msgstr "" +msgstr "허용되는 최소 재고 수준" #: part/models.py:1241 msgid "Units of measure for this part" -msgstr "" +msgstr "이 부품의 측정 단위" #: part/models.py:1248 msgid "Can this part be built from other parts?" -msgstr "" +msgstr "이 부품을 다른 부품으로 조립/제작할 수 있나요?" #: part/models.py:1254 msgid "Can this part be used to build other parts?" -msgstr "" +msgstr "이 부품을 사용해 다른 부품을 제작할 수 있나요?" #: part/models.py:1260 msgid "Does this part have tracking for unique items?" -msgstr "" +msgstr "이 부품에 고유 항목 추적 기능이 있나요?" #: part/models.py:1266 msgid "Can this part have test results recorded against it?" -msgstr "" +msgstr "이 부품에 대한 테스트 결과를 기록할 수 있나요?" #: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" -msgstr "" +msgstr "이 부품을 외부 공급업체에서 구매할 수 있나요?" #: part/models.py:1278 msgid "Can this part be sold to customers?" -msgstr "" +msgstr "이 부품을 고객에게 판매할 수 있나요?" #: part/models.py:1282 msgid "Is this part active?" -msgstr "" +msgstr "이 부품이 활성 상태인가요?" #: part/models.py:1288 msgid "Locked parts cannot be edited" -msgstr "" +msgstr "잠긴 부품은 편집할 수 없습니다" #: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" -msgstr "" +msgstr "소프트웨어 제품이나 라이선스 같은 가상 부품인가요?" #: part/models.py:1299 msgid "BOM Validated" -msgstr "" +msgstr "BOM 검증됨" #: part/models.py:1300 msgid "Is the BOM for this part valid?" -msgstr "" +msgstr "이 부품의 BOM이 유효한가요?" #: part/models.py:1306 msgid "BOM checksum" -msgstr "" +msgstr "BOM 체크섬" #: part/models.py:1307 msgid "Stored BOM checksum" -msgstr "" +msgstr "저장된 BOM 체크섬" #: part/models.py:1315 msgid "BOM checked by" -msgstr "" +msgstr "BOM 검증자" #: part/models.py:1320 msgid "BOM checked date" -msgstr "" +msgstr "BOM 검증 날짜" #: part/models.py:1336 msgid "Creation User" -msgstr "" +msgstr "생성 사용자" #: part/models.py:1346 msgid "Owner responsible for this part" -msgstr "" +msgstr "이 부품의 책임 소유자" #: part/models.py:2303 msgid "Sell multiple" -msgstr "" +msgstr "판매 배수" #: part/models.py:3308 msgid "Currency used to cache pricing calculations" -msgstr "" +msgstr "가격 계산 캐시에 사용되는 통화" #: part/models.py:3324 msgid "Minimum BOM Cost" -msgstr "" +msgstr "최소 BOM 비용" #: part/models.py:3325 msgid "Minimum cost of component parts" -msgstr "" +msgstr "구성 부품의 최소 비용" #: part/models.py:3331 msgid "Maximum BOM Cost" -msgstr "" +msgstr "최대 BOM 비용" #: part/models.py:3332 msgid "Maximum cost of component parts" -msgstr "" +msgstr "구성 부품의 최대 비용" #: part/models.py:3338 msgid "Minimum Purchase Cost" -msgstr "" +msgstr "최소 구매 비용" #: part/models.py:3339 msgid "Minimum historical purchase cost" -msgstr "" +msgstr "과거 구매 비용의 최소값" #: part/models.py:3345 msgid "Maximum Purchase Cost" -msgstr "" +msgstr "최대 구매 비용" #: part/models.py:3346 msgid "Maximum historical purchase cost" -msgstr "" +msgstr "과거 구매 비용의 최대값" #: part/models.py:3352 msgid "Minimum Internal Price" -msgstr "" +msgstr "최소 내부 가격" #: part/models.py:3353 msgid "Minimum cost based on internal price breaks" -msgstr "" +msgstr "내부 가격 구간에 기반한 최소 비용" #: part/models.py:3359 msgid "Maximum Internal Price" -msgstr "" +msgstr "최대 내부 가격" #: part/models.py:3360 msgid "Maximum cost based on internal price breaks" -msgstr "" +msgstr "내부 가격 구간에 기반한 최대 비용" #: part/models.py:3366 msgid "Minimum Supplier Price" -msgstr "" +msgstr "최소 공급업체 가격" #: part/models.py:3367 msgid "Minimum price of part from external suppliers" -msgstr "" +msgstr "외부 공급업체로부터의 최소 가격" #: part/models.py:3373 msgid "Maximum Supplier Price" -msgstr "" +msgstr "최대 공급업체 가격" #: part/models.py:3374 msgid "Maximum price of part from external suppliers" -msgstr "" +msgstr "외부 공급업체로부터의 최대 가격" #: part/models.py:3380 msgid "Minimum Variant Cost" -msgstr "" +msgstr "최소 변형 비용" #: part/models.py:3381 msgid "Calculated minimum cost of variant parts" -msgstr "" +msgstr "변형 부품의 계산된 최소 비용" #: part/models.py:3387 msgid "Maximum Variant Cost" -msgstr "" +msgstr "최대 변형 비용" #: part/models.py:3388 msgid "Calculated maximum cost of variant parts" -msgstr "" +msgstr "변형 부품의 계산된 최대 비용" #: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" -msgstr "" +msgstr "최소 비용" #: part/models.py:3395 msgid "Override minimum cost" -msgstr "" +msgstr "최소 비용 재정의" #: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" -msgstr "" +msgstr "최대 비용" #: part/models.py:3402 msgid "Override maximum cost" -msgstr "" +msgstr "최대 비용 재정의" #: part/models.py:3409 msgid "Calculated overall minimum cost" -msgstr "" +msgstr "계산된 전체 최소 비용" #: part/models.py:3416 msgid "Calculated overall maximum cost" -msgstr "" +msgstr "계산된 전체 최대 비용" #: part/models.py:3422 msgid "Minimum Sale Price" -msgstr "" +msgstr "최소 판매 가격" #: part/models.py:3423 msgid "Minimum sale price based on price breaks" -msgstr "" +msgstr "가격 구간에 기반한 최소 판매 가격" #: part/models.py:3429 msgid "Maximum Sale Price" -msgstr "" +msgstr "최대 판매 가격" #: part/models.py:3430 msgid "Maximum sale price based on price breaks" -msgstr "" +msgstr "가격 구간에 기반한 최대 판매 가격" #: part/models.py:3436 msgid "Minimum Sale Cost" -msgstr "" +msgstr "최소 판매 비용" #: part/models.py:3437 msgid "Minimum historical sale price" -msgstr "" +msgstr "과거 판매 가격의 최소값" #: part/models.py:3443 msgid "Maximum Sale Cost" -msgstr "" +msgstr "최대 판매 비용" #: part/models.py:3444 msgid "Maximum historical sale price" -msgstr "" +msgstr "과거 판매 가격의 최대값" #: part/models.py:3462 msgid "Part for stocktake" -msgstr "" +msgstr "재고 조사 대상 부품" #: part/models.py:3467 msgid "Item Count" -msgstr "" +msgstr "항목 수" #: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" -msgstr "" +msgstr "재고 조사 시점의 개별 재고 항목 수" #: part/models.py:3476 msgid "Total available stock at time of stocktake" -msgstr "" +msgstr "재고 조사 시점의 사용 가능한 총 재고" #: part/models.py:3480 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" -msgstr "" +msgstr "날짜" #: part/models.py:3481 msgid "Date stocktake was performed" -msgstr "" +msgstr "재고 조사가 수행된 날짜" #: part/models.py:3488 msgid "Minimum Stock Cost" -msgstr "" +msgstr "최소 재고 비용" #: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" -msgstr "" +msgstr "보유 재고의 추정 최소 비용" #: part/models.py:3495 msgid "Maximum Stock Cost" -msgstr "" +msgstr "최대 재고 비용" #: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" -msgstr "" +msgstr "보유 재고의 추정 최대 비용" #: part/models.py:3506 msgid "Part Sale Price Break" -msgstr "" +msgstr "부품 판매 가격 구간" #: part/models.py:3620 msgid "Part Test Template" -msgstr "" +msgstr "부품 테스트 템플릿" #: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" -msgstr "" +msgstr "템플릿 이름이 올바르지 않습니다 - 영숫자 문자를 최소 1개 포함해야 합니다" #: part/models.py:3678 msgid "Test templates can only be created for testable parts" -msgstr "" +msgstr "테스트 템플릿은 테스트 가능한 부품에만 만들 수 있습니다" #: part/models.py:3692 msgid "Test template with the same key already exists for part" -msgstr "" +msgstr "같은 키의 테스트 템플릿이 이 부품에 이미 존재합니다" #: part/models.py:3709 msgid "Test Name" -msgstr "" +msgstr "테스트 이름" #: part/models.py:3710 msgid "Enter a name for the test" -msgstr "" +msgstr "테스트 이름을 입력하세요" #: part/models.py:3716 msgid "Test Key" -msgstr "" +msgstr "테스트 키" #: part/models.py:3717 msgid "Simplified key for the test" -msgstr "" +msgstr "테스트를 위한 단순화된 키" #: part/models.py:3724 msgid "Test Description" -msgstr "" +msgstr "테스트 설명" #: part/models.py:3725 msgid "Enter description for this test" -msgstr "" +msgstr "이 테스트에 대한 설명을 입력하세요" #: part/models.py:3729 msgid "Is this test enabled?" -msgstr "" +msgstr "이 테스트가 활성화되어 있나요?" #: part/models.py:3734 msgid "Required" -msgstr "" +msgstr "필수" #: part/models.py:3735 msgid "Is this test required to pass?" -msgstr "" +msgstr "이 테스트는 통과가 필수인가요?" #: part/models.py:3740 msgid "Requires Value" -msgstr "" +msgstr "값 필요" #: part/models.py:3741 msgid "Does this test require a value when adding a test result?" -msgstr "" +msgstr "테스트 결과를 추가할 때 값이 필요한가요?" #: part/models.py:3746 msgid "Requires Attachment" -msgstr "" +msgstr "첨부 필요" #: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" -msgstr "" +msgstr "테스트 결과를 추가할 때 파일 첨부가 필요한가요?" #: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" -msgstr "" +msgstr "이 테스트의 유효한 선택지(쉼표로 구분)" #: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" -msgstr "" +msgstr "조립품이 잠겨 있어 BOM 항목을 수정할 수 없습니다" #: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" +msgstr "변형 조립품이 잠겨 있어 BOM 항목을 수정할 수 없습니다" #: part/models.py:3966 msgid "Select parent part" -msgstr "" +msgstr "상위 부품을 선택하세요" #: part/models.py:3976 msgid "Sub part" -msgstr "" +msgstr "하위 부품" #: part/models.py:3977 msgid "Select part to be used in BOM" -msgstr "" +msgstr "BOM에 사용할 부품을 선택하세요" #: part/models.py:3988 msgid "BOM quantity for this BOM item" -msgstr "" +msgstr "이 BOM 항목의 BOM 수량" #: part/models.py:3994 msgid "This BOM item is optional" -msgstr "" +msgstr "이 BOM 항목은 선택 사항입니다" #: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" -msgstr "" +msgstr "이 BOM 항목은 소모품입니다(제작 주문에서 추적되지 않음)" #: part/models.py:4008 msgid "Setup Quantity" -msgstr "" +msgstr "설정 수량" #: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" -msgstr "" +msgstr "설정 손실을 고려해 제작에 추가로 필요한 수량" #: part/models.py:4017 msgid "Attrition" -msgstr "" +msgstr "손실률" #: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" -msgstr "" +msgstr "제작 손실률 추정치(백분율, 0-100)" #: part/models.py:4030 msgid "Rounding Multiple" -msgstr "" +msgstr "반올림 배수" #: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" -msgstr "" +msgstr "필요 생산 수량을 이 값의 가장 가까운 배수로 올림합니다" #: part/models.py:4040 msgid "BOM item reference" -msgstr "" +msgstr "BOM 항목 참조" #: part/models.py:4048 msgid "BOM item notes" -msgstr "" +msgstr "BOM 항목 메모" #: part/models.py:4054 msgid "Checksum" -msgstr "" +msgstr "체크섬" #: part/models.py:4055 msgid "BOM line checksum" -msgstr "" +msgstr "BOM 라인 체크섬" #: part/models.py:4060 msgid "Validated" -msgstr "" +msgstr "검증됨" #: part/models.py:4061 msgid "This BOM item has been validated" -msgstr "" +msgstr "이 BOM 항목이 검증되었습니다" #: part/models.py:4066 msgid "Gets inherited" -msgstr "" +msgstr "상속됨" #: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" -msgstr "" +msgstr "이 BOM 항목은 변형 부품의 BOM에 상속됩니다" #: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" -msgstr "" +msgstr "변형 부품의 재고 항목을 이 BOM 항목에 사용할 수 있습니다" #: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" -msgstr "" +msgstr "추적 가능한 부품의 수량은 정수여야 합니다" #: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" -msgstr "" +msgstr "하위 부품을 지정해야 합니다" #: part/models.py:4343 msgid "BOM Item Substitute" -msgstr "" +msgstr "BOM 항목 대체품" #: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" -msgstr "" +msgstr "대체 부품은 기준 부품과 같을 수 없습니다" #: part/models.py:4377 msgid "Parent BOM item" -msgstr "" +msgstr "상위 BOM 항목" #: part/models.py:4385 msgid "Substitute part" -msgstr "" +msgstr "대체 부품" #: part/models.py:4401 msgid "Part 1" -msgstr "" +msgstr "부품 1" #: part/models.py:4409 msgid "Part 2" -msgstr "" +msgstr "부품 2" #: part/models.py:4410 msgid "Select Related Part" -msgstr "" +msgstr "관련 부품 선택" #: part/models.py:4417 msgid "Note for this relationship" -msgstr "" +msgstr "이 관계에 대한 메모" #: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" -msgstr "" +msgstr "부품과 자기 자신 사이에는 부품 관계를 만들 수 없습니다" #: part/models.py:4441 msgid "Duplicate relationship already exists" -msgstr "" +msgstr "중복된 관계가 이미 존재합니다" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" -msgstr "" +msgstr "상위 카테고리" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" -msgstr "" +msgstr "상위 부품 카테고리" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" -msgstr "" +msgstr "하위 카테고리" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" -msgstr "" +msgstr "결과" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" -msgstr "" +msgstr "이 템플릿에 대해 기록된 결과 수" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" -msgstr "" +msgstr "이 재고 항목의 구매 통화" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" -msgstr "" +msgstr "파일이 이미지가 아닙니다" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" -msgstr "" +msgstr "원본 부품" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" -msgstr "" +msgstr "복제할 원본 부품을 선택하세요" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" -msgstr "" +msgstr "이미지 복사" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" -msgstr "" +msgstr "원본 부품의 이미지를 복사합니다" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" -msgstr "" +msgstr "BOM 복사" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" -msgstr "" +msgstr "원본 부품의 자재 명세서(BOM)를 복사합니다" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" -msgstr "" +msgstr "원본 부품의 매개변수 데이터를 복사합니다" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" -msgstr "" +msgstr "메모 복사" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" -msgstr "" +msgstr "원본 부품의 메모를 복사합니다" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" -msgstr "" +msgstr "테스트 복사" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" -msgstr "" +msgstr "원본 부품의 테스트 템플릿을 복사합니다" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" -msgstr "" +msgstr "초기 재고 수량" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." -msgstr "" +msgstr "이 부품의 초기 재고 수량을 지정하세요. 수량이 0이면 재고가 추가되지 않습니다." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" -msgstr "" +msgstr "초기 재고 위치" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" -msgstr "" +msgstr "이 부품의 초기 재고 위치를 지정하세요" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" -msgstr "" +msgstr "공급업체를 선택하세요(또는 비워 두고 건너뛰기)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" -msgstr "" +msgstr "제조사를 선택하세요(또는 비워 두고 건너뛰기)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" -msgstr "" +msgstr "제조사 부품 번호" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" -msgstr "" +msgstr "선택한 회사는 유효한 공급업체가 아닙니다" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" -msgstr "" +msgstr "선택한 회사는 유효한 제조사가 아닙니다" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" -msgstr "" +msgstr "이 MPN과 일치하는 제조사 부품이 이미 존재합니다" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" -msgstr "" +msgstr "이 SKU와 일치하는 공급업체 부품이 이미 존재합니다" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" -msgstr "" +msgstr "카테고리 이름" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" -msgstr "" +msgstr "제작 중" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" -msgstr "" +msgstr "현재 생산 중인 이 부품의 수량" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" -msgstr "" +msgstr "제작 예정인 이 부품의 미완료 수량" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" -msgstr "" +msgstr "재고 항목" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" -msgstr "" +msgstr "개정" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" -msgstr "" +msgstr "총 재고" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" -msgstr "" +msgstr "미할당 재고" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" -msgstr "" +msgstr "변형 재고" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" -msgstr "" +msgstr "부품 복제" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" -msgstr "" +msgstr "다른 부품에서 초기 데이터를 복사합니다" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" -msgstr "" +msgstr "초기 재고" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" -msgstr "" +msgstr "초기 재고 수량과 함께 부품을 생성합니다" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" -msgstr "" +msgstr "공급업체 정보" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" -msgstr "" +msgstr "이 부품에 대한 초기 공급업체 정보를 추가합니다" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" -msgstr "" +msgstr "카테고리 매개변수 복사" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" -msgstr "" +msgstr "선택한 부품 카테고리의 매개변수 템플릿을 복사합니다" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" -msgstr "" +msgstr "기존 이미지" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" -msgstr "" +msgstr "기존 부품 이미지의 파일명" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" -msgstr "" +msgstr "이미지 파일이 존재하지 않습니다" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" -msgstr "" +msgstr "전체 자재 명세서(BOM) 검증" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" -msgstr "" +msgstr "제작 가능" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" -msgstr "" +msgstr "제작 주문에 필요" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" -msgstr "" +msgstr "제작 주문에 할당됨" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" -msgstr "" +msgstr "판매 주문에 필요" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" -msgstr "" +msgstr "판매 주문에 할당됨" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" -msgstr "" +msgstr "부품 IPN" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" -msgstr "" +msgstr "부품 설명" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" -msgstr "" +msgstr "재고 조사 정보를 생성할 부품을 선택하세요(및 모든 변형 부품)." -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" -msgstr "" +msgstr "해당 카테고리(및 하위 카테고리)의 모든 부품을 포함할 카테고리를 선택하세요" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" -msgstr "" +msgstr "해당 위치(하위 위치 포함)에 재고가 있는 모든 부품을 포함할 위치를 선택하세요" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" -msgstr "" +msgstr "재고 조사 항목 생성" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" -msgstr "" +msgstr "선택한 부품에 대한 재고 조사 항목을 저장합니다" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" -msgstr "" +msgstr "보고서 생성" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" -msgstr "" +msgstr "선택한 부품에 대한 재고 조사 보고서를 생성합니다" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" -msgstr "" +msgstr "최소 가격" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" -msgstr "" +msgstr "계산된 최소 가격 값을 재정의합니다" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" -msgstr "" +msgstr "최소 가격 통화" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" -msgstr "" +msgstr "최대 가격" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" -msgstr "" +msgstr "계산된 최대 가격 값을 재정의합니다" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" -msgstr "" +msgstr "최대 가격 통화" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" -msgstr "" +msgstr "업데이트" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" -msgstr "" +msgstr "이 부품의 가격 정보를 업데이트합니다" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" -msgstr "" +msgstr "제공된 통화를 {default_currency}(으)로 변환할 수 없습니다" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" -msgstr "" +msgstr "최소 가격은 최대 가격보다 클 수 없습니다" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" -msgstr "" +msgstr "최대 가격은 최소 가격보다 작을 수 없습니다" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" -msgstr "" +msgstr "수량은 0 이상이어야 합니다" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" -msgstr "" +msgstr "상위 조립품을 선택하세요" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" -msgstr "" +msgstr "구성 부품을 선택하세요" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" -msgstr "" +msgstr "BOM을 복사할 부품을 선택하세요" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" -msgstr "" +msgstr "기존 데이터 제거" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" -msgstr "" +msgstr "복사하기 전에 기존 BOM 항목을 제거합니다" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" -msgstr "" +msgstr "상속 항목 포함" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" -msgstr "" +msgstr "템플릿 부품에서 상속된 BOM 항목 포함" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" -msgstr "" +msgstr "잘못된 행 건너뛰기" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" -msgstr "" +msgstr "이 옵션을 사용하면 잘못된 행을 건너뜁니다" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" -msgstr "" +msgstr "대체 부품 복사" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" -msgstr "" +msgstr "BOM 항목을 복제할 때 대체 부품도 복사" #: part/tasks.py:42 msgid "Low stock notification" -msgstr "" +msgstr "재고 부족 알림" #: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" -msgstr "" +msgstr "{part.name}의 사용 가능한 재고가 설정된 최소 수준 아래로 떨어졌습니다" #: part/tasks.py:74 msgid "Stale stock notification" -msgstr "" +msgstr "유통기한 임박 재고 알림" #: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" -msgstr "" +msgstr "유통기한이 임박한 재고 항목이 1개 있습니다" #: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" -msgstr "" +msgstr "유통기한이 임박한 재고 항목이 {item_count}개 있습니다" #: part/tasks.py:89 msgid "No expiry date" -msgstr "" +msgstr "유통기한 없음" #: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" -msgstr "" +msgstr "{abs(days_diff)}일 전에 만료됨" #: part/tasks.py:99 msgid "Expires today" -msgstr "" +msgstr "오늘 만료됨" #: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" -msgstr "" +msgstr "{days_until_expiry}일" #: plugin/api.py:80 msgid "Builtin" -msgstr "" +msgstr "내장" #: plugin/api.py:94 msgid "Mandatory" -msgstr "" +msgstr "필수" #: plugin/api.py:109 msgid "Sample" -msgstr "" +msgstr "샘플" #: plugin/api.py:123 plugin/models.py:167 msgid "Installed" -msgstr "" +msgstr "설치됨" #: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" -msgstr "" +msgstr "플러그인이 현재 활성 상태이므로 삭제할 수 없습니다" #: plugin/base/action/api.py:56 msgid "No action specified" -msgstr "" +msgstr "작업이 지정되지 않았습니다" #: plugin/base/action/api.py:70 msgid "No matching action found" -msgstr "" +msgstr "일치하는 작업을 찾을 수 없습니다" #: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" -msgstr "" +msgstr "바코드 데이터와 일치하는 항목을 찾을 수 없습니다" #: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" -msgstr "" +msgstr "바코드 데이터와 일치하는 항목을 찾았습니다" #: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" -msgstr "" +msgstr "지원되지 않는 모델입니다" #: plugin/base/barcodes/api.py:259 msgid "Model instance not found" -msgstr "" +msgstr "모델 인스턴스를 찾을 수 없습니다" #: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" -msgstr "" +msgstr "바코드가 기존 항목과 일치합니다" #: plugin/base/barcodes/api.py:419 msgid "No matching part data found" -msgstr "" +msgstr "일치하는 부품 데이터를 찾을 수 없습니다" #: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" -msgstr "" +msgstr "일치하는 공급업체 부품을 찾을 수 없습니다" #: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" -msgstr "" +msgstr "일치하는 공급업체 부품이 여러 개 있습니다" #: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" -msgstr "" +msgstr "바코드 데이터에 일치하는 플러그인을 찾을 수 없습니다" #: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" -msgstr "" +msgstr "공급업체 부품과 일치함" #: plugin/base/barcodes/api.py:529 msgid "Item has already been received" -msgstr "" +msgstr "항목이 이미 입고되었습니다" #: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" -msgstr "" +msgstr "공급업체 바코드에 일치하는 플러그인이 없습니다" #: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" -msgstr "" +msgstr "일치하는 라인 항목이 여러 개 있습니다" #: plugin/base/barcodes/api.py:629 msgid "No matching line item found" -msgstr "" +msgstr "일치하는 라인 항목을 찾을 수 없습니다" #: plugin/base/barcodes/api.py:675 msgid "No sales order provided" -msgstr "" +msgstr "판매 주문이 제공되지 않았습니다" #: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" -msgstr "" +msgstr "바코드가 기존 재고 항목과 일치하지 않습니다" #: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" -msgstr "" +msgstr "재고 항목이 라인 항목과 일치하지 않습니다" #: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" -msgstr "" +msgstr "사용 가능한 재고가 부족합니다" #: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" -msgstr "" +msgstr "재고 항목이 판매 주문에 할당되었습니다" #: plugin/base/barcodes/api.py:746 msgid "Not enough information" -msgstr "" +msgstr "정보가 충분하지 않습니다" #: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" -msgstr "" +msgstr "일치하는 항목을 찾았습니다" #: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" -msgstr "" +msgstr "공급업체 부품이 라인 항목과 일치하지 않습니다" #: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" -msgstr "" +msgstr "라인 항목이 이미 완료되었습니다" #: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" -msgstr "" +msgstr "라인 항목을 입고하려면 추가 정보가 필요합니다" #: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" -msgstr "" +msgstr "구매 주문 라인 항목을 입고했습니다" #: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" -msgstr "" +msgstr "라인 항목 입고에 실패했습니다" #: plugin/base/barcodes/serializers.py:53 msgid "Scanned barcode data" -msgstr "" +msgstr "스캔한 바코드 데이터" #: plugin/base/barcodes/serializers.py:62 msgid "Model name to generate barcode for" -msgstr "" +msgstr "바코드를 생성할 모델 이름" #: plugin/base/barcodes/serializers.py:67 msgid "Primary key of model object to generate barcode for" -msgstr "" +msgstr "바코드를 생성할 모델 객체의 기본 키" #: plugin/base/barcodes/serializers.py:137 msgid "Purchase Order to allocate items against" -msgstr "" +msgstr "항목을 할당할 구매 주문" #: plugin/base/barcodes/serializers.py:143 msgid "Purchase order is not open" -msgstr "" +msgstr "구매 주문이 열려 있지 않습니다" #: plugin/base/barcodes/serializers.py:161 msgid "Supplier to receive items from" -msgstr "" +msgstr "항목을 입고할 공급업체" #: plugin/base/barcodes/serializers.py:168 msgid "PurchaseOrder to receive items against" -msgstr "" +msgstr "항목을 입고할 구매 주문" #: plugin/base/barcodes/serializers.py:174 msgid "Purchase order has not been placed" -msgstr "" +msgstr "구매 주문이 발주되지 않았습니다" #: plugin/base/barcodes/serializers.py:182 msgid "Location to receive items into" -msgstr "" +msgstr "항목을 입고할 위치" #: plugin/base/barcodes/serializers.py:188 msgid "Cannot select a structural location" -msgstr "" +msgstr "구조적 위치를 선택할 수 없습니다" #: plugin/base/barcodes/serializers.py:196 msgid "Purchase order line item to receive items against" -msgstr "" +msgstr "항목을 입고할 구매 주문 라인 항목" #: plugin/base/barcodes/serializers.py:202 msgid "Automatically allocate stock items to the purchase order" -msgstr "" +msgstr "구매 주문에 재고 항목을 자동으로 할당" #: plugin/base/barcodes/serializers.py:215 msgid "Sales Order to allocate items against" -msgstr "" +msgstr "항목을 할당할 판매 주문" #: plugin/base/barcodes/serializers.py:221 msgid "Sales order is not open" -msgstr "" +msgstr "판매 주문이 열려 있지 않습니다" #: plugin/base/barcodes/serializers.py:229 msgid "Sales order line item to allocate items against" -msgstr "" +msgstr "항목을 할당할 판매 주문 라인 항목" #: plugin/base/barcodes/serializers.py:236 msgid "Sales order shipment to allocate items against" -msgstr "" +msgstr "항목을 할당할 판매 주문 출하" #: plugin/base/barcodes/serializers.py:242 msgid "Shipment has already been delivered" -msgstr "" +msgstr "출하가 이미 배송되었습니다" #: plugin/base/barcodes/serializers.py:247 msgid "Quantity to allocate" -msgstr "" +msgstr "할당할 수량" #: plugin/base/label/label.py:41 msgid "Label printing failed" -msgstr "" +msgstr "라벨 인쇄에 실패했습니다" #: plugin/base/label/mixins.py:53 msgid "Error rendering label to PDF" -msgstr "" +msgstr "라벨을 PDF로 렌더링하는 중 오류가 발생했습니다" #: plugin/base/label/mixins.py:67 msgid "Error rendering label to HTML" -msgstr "" +msgstr "라벨을 HTML로 렌더링하는 중 오류가 발생했습니다" #: plugin/base/label/mixins.py:144 msgid "No items provided to print" -msgstr "" +msgstr "인쇄할 항목이 제공되지 않았습니다" #: plugin/base/ui/serializers.py:30 msgid "Plugin Name" -msgstr "" +msgstr "플러그인 이름" #: plugin/base/ui/serializers.py:34 msgid "Feature Type" -msgstr "" +msgstr "기능 유형" #: plugin/base/ui/serializers.py:39 msgid "Feature Label" -msgstr "" +msgstr "기능 라벨" #: plugin/base/ui/serializers.py:44 msgid "Feature Title" -msgstr "" +msgstr "기능 제목" #: plugin/base/ui/serializers.py:49 msgid "Feature Description" -msgstr "" +msgstr "기능 설명" #: plugin/base/ui/serializers.py:54 msgid "Feature Icon" -msgstr "" +msgstr "기능 아이콘" #: plugin/base/ui/serializers.py:58 msgid "Feature Options" -msgstr "" +msgstr "기능 옵션" #: plugin/base/ui/serializers.py:61 msgid "Feature Context" -msgstr "" +msgstr "기능 컨텍스트" #: plugin/base/ui/serializers.py:64 msgid "Feature Source (javascript)" -msgstr "" +msgstr "기능 소스(JavaScript)" #: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" -msgstr "" +msgstr "InvenTree 바코드" #: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" -msgstr "" +msgstr "바코드에 대한 기본 지원을 제공합니다" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 @@ -7122,1039 +7166,1056 @@ msgstr "" #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 #: plugin/builtin/suppliers/mouser.py:20 plugin/builtin/suppliers/tme.py:22 msgid "InvenTree contributors" -msgstr "" +msgstr "InvenTree 기여자" #: plugin/builtin/barcodes/inventree_barcode.py:34 msgid "Internal Barcode Format" -msgstr "" +msgstr "내부 바코드 형식" #: plugin/builtin/barcodes/inventree_barcode.py:35 msgid "Select an internal barcode format" -msgstr "" +msgstr "내부 바코드 형식을 선택하세요" #: plugin/builtin/barcodes/inventree_barcode.py:37 msgid "JSON barcodes (human readable)" -msgstr "" +msgstr "JSON 바코드(사람이 읽기 쉬움)" #: plugin/builtin/barcodes/inventree_barcode.py:38 msgid "Short barcodes (space optimized)" -msgstr "" +msgstr "짧은 바코드(공간 최적화)" #: plugin/builtin/barcodes/inventree_barcode.py:43 msgid "Short Barcode Prefix" -msgstr "" +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 "" +msgstr "짧은 바코드에 사용할 접두사를 사용자 지정합니다. 여러 InvenTree 인스턴스가 있는 환경에서 유용할 수 있습니다" #: plugin/builtin/events/auto_create_builds.py:28 msgid "Auto Create Builds" -msgstr "" +msgstr "빌드 자동 생성" #: plugin/builtin/events/auto_create_builds.py:31 msgid "Automatically create build orders for assemblies" -msgstr "" +msgstr "조립품에 대한 빌드 주문을 자동으로 생성합니다" #: plugin/builtin/events/auto_issue_orders.py:17 msgid "Auto Issue Orders" -msgstr "" +msgstr "주문 자동 발행" #: plugin/builtin/events/auto_issue_orders.py:20 msgid "Automatically issue orders on the assigned target date" -msgstr "" +msgstr "지정된 목표 날짜에 주문을 자동으로 발행합니다" #: plugin/builtin/events/auto_issue_orders.py:30 msgid "Auto Issue Build Orders" -msgstr "" +msgstr "빌드 주문 자동 발행" #: plugin/builtin/events/auto_issue_orders.py:32 msgid "Automatically issue build orders on the assigned target date" -msgstr "" +msgstr "지정된 목표 날짜에 빌드 주문을 자동으로 발행합니다" #: plugin/builtin/events/auto_issue_orders.py:38 msgid "Auto Issue Purchase Orders" -msgstr "" +msgstr "구매 주문 자동 발행" #: plugin/builtin/events/auto_issue_orders.py:40 msgid "Automatically issue purchase orders on the assigned target date" -msgstr "" +msgstr "지정된 목표 날짜에 구매 주문을 자동으로 발행합니다" #: plugin/builtin/events/auto_issue_orders.py:46 msgid "Auto Issue Sales Orders" -msgstr "" +msgstr "판매 주문 자동 발행" #: plugin/builtin/events/auto_issue_orders.py:48 msgid "Automatically issue sales orders on the assigned target date" -msgstr "" +msgstr "지정된 목표 날짜에 판매 주문을 자동으로 발행합니다" #: plugin/builtin/events/auto_issue_orders.py:54 msgid "Auto Issue Return Orders" -msgstr "" +msgstr "반품 주문 자동 발행" #: plugin/builtin/events/auto_issue_orders.py:56 msgid "Automatically issue return orders on the assigned target date" -msgstr "" +msgstr "지정된 목표 날짜에 반품 주문을 자동으로 발행합니다" #: plugin/builtin/events/auto_issue_orders.py:62 msgid "Issue Backdated Orders" -msgstr "" +msgstr "소급 날짜 주문 발행" #: plugin/builtin/events/auto_issue_orders.py:63 msgid "Automatically issue orders that are backdated" -msgstr "" +msgstr "날짜가 소급된 주문을 자동으로 발행합니다" #: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" -msgstr "" +msgstr "레벨" #: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" -msgstr "" +msgstr "내보낼 레벨 수 - 0으로 설정하면 모든 BOM 레벨을 내보냅니다" #: plugin/builtin/exporter/bom_exporter.py:31 #: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" -msgstr "" +msgstr "총 수량" #: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" -msgstr "" +msgstr "BOM에서 각 부품의 총 수량을 포함합니다" #: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" -msgstr "" +msgstr "재고 데이터" #: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" -msgstr "" +msgstr "부품 재고 데이터를 포함합니다" #: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" -msgstr "" +msgstr "가격 데이터" #: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" -msgstr "" +msgstr "부품 가격 데이터를 포함합니다" #: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" -msgstr "" +msgstr "공급업체 데이터" #: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" -msgstr "" +msgstr "공급업체 데이터를 포함합니다" #: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" -msgstr "" +msgstr "제조사 데이터" #: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" -msgstr "" +msgstr "제조사 데이터를 포함합니다" #: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" -msgstr "" +msgstr "대체품 데이터" #: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" -msgstr "" +msgstr "대체 부품 데이터를 포함합니다" #: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" -msgstr "" +msgstr "매개변수 데이터" #: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" -msgstr "" +msgstr "부품 매개변수 데이터를 포함합니다" #: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" -msgstr "" +msgstr "다중 레벨 BOM 내보내기" #: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" -msgstr "" +msgstr "다중 레벨 BOM 내보내기를 지원합니다" #: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" -msgstr "" +msgstr "BOM 레벨" #: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" -msgstr "" +msgstr "대체품 {n}" #: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" -msgstr "" +msgstr "공급업체 {n}" #: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" -msgstr "" +msgstr "공급업체 {n} SKU" #: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" -msgstr "" +msgstr "공급업체 {n} MPN" #: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" -msgstr "" +msgstr "제조사 {n}" #: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" -msgstr "" +msgstr "제조사 {n} MPN" #: plugin/builtin/exporter/inventree_exporter.py:14 msgid "InvenTree Generic Exporter" -msgstr "" +msgstr "InvenTree 일반 내보내기" #: plugin/builtin/exporter/inventree_exporter.py:15 msgid "Provides support for exporting data from InvenTree" -msgstr "" +msgstr "InvenTree에서 데이터를 내보내는 기능을 지원합니다" #: plugin/builtin/exporter/parameter_exporter.py:16 msgid "Exclude Inactive" -msgstr "" +msgstr "비활성 제외" #: plugin/builtin/exporter/parameter_exporter.py:17 msgid "Exclude parameters which are inactive" -msgstr "" +msgstr "비활성 매개변수를 제외합니다" #: plugin/builtin/exporter/parameter_exporter.py:29 msgid "Parameter Exporter" -msgstr "" +msgstr "매개변수 내보내기" #: plugin/builtin/exporter/parameter_exporter.py:30 msgid "Exporter for model parameter data" -msgstr "" +msgstr "모델 매개변수 데이터 내보내기 도구" #: plugin/builtin/exporter/stocktake_exporter.py:25 msgid "Include External Stock" -msgstr "" +msgstr "외부 재고 포함" #: plugin/builtin/exporter/stocktake_exporter.py:26 msgid "Include external stock in the stocktake data" -msgstr "" +msgstr "재고 조사 데이터에 외부 재고를 포함합니다" #: plugin/builtin/exporter/stocktake_exporter.py:31 msgid "Include Variant Items" -msgstr "" +msgstr "변형 항목 포함" #: plugin/builtin/exporter/stocktake_exporter.py:32 msgid "Include part variant stock in pricing calculations" -msgstr "" +msgstr "가격 계산에 부품 변형 재고를 포함합니다" #: plugin/builtin/exporter/stocktake_exporter.py:44 msgid "Part Stocktake Exporter" -msgstr "" +msgstr "부품 재고 조사 내보내기" #: plugin/builtin/exporter/stocktake_exporter.py:45 msgid "Exporter for part stocktake data" -msgstr "" +msgstr "부품 재고 조사 데이터 내보내기 도구" #: plugin/builtin/exporter/stocktake_exporter.py:108 msgid "Minimum Unit Cost" -msgstr "" +msgstr "최소 단가" #: plugin/builtin/exporter/stocktake_exporter.py:109 msgid "Maximum Unit Cost" -msgstr "" +msgstr "최대 단가" #: plugin/builtin/exporter/stocktake_exporter.py:110 msgid "Minimum Total Cost" -msgstr "" +msgstr "최소 총 비용" #: plugin/builtin/exporter/stocktake_exporter.py:111 msgid "Maximum Total Cost" -msgstr "" +msgstr "최대 총 비용" #: plugin/builtin/integration/core_notifications.py:23 msgid "InvenTree UI Notifications" -msgstr "" +msgstr "InvenTree UI 알림" #: plugin/builtin/integration/core_notifications.py:26 msgid "Integrated UI notification methods" -msgstr "" +msgstr "통합 UI 알림 방법" #: plugin/builtin/integration/core_notifications.py:67 msgid "InvenTree Email Notifications" -msgstr "" +msgstr "InvenTree 이메일 알림" #: plugin/builtin/integration/core_notifications.py:70 msgid "Integrated email notification methods" -msgstr "" +msgstr "통합 이메일 알림 방법" #: plugin/builtin/integration/core_notifications.py:75 msgid "Allow email notifications" -msgstr "" +msgstr "이메일 알림 허용" #: plugin/builtin/integration/core_notifications.py:76 msgid "Allow email notifications to be sent to this user" -msgstr "" +msgstr "이 사용자에게 이메일 알림을 보낼 수 있도록 허용합니다" #: plugin/builtin/integration/core_notifications.py:123 msgid "InvenTree Slack Notifications" -msgstr "" +msgstr "InvenTree Slack 알림" #: plugin/builtin/integration/core_notifications.py:126 msgid "Integrated Slack notification methods" -msgstr "" +msgstr "통합 Slack 알림 방법" #: plugin/builtin/integration/core_notifications.py:131 msgid "Slack incoming webhook URL" -msgstr "" +msgstr "Slack 수신 웹훅 URL" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" -msgstr "" +msgstr "Slack 채널로 메시지를 보내는 데 사용되는 URL" #: plugin/builtin/integration/core_notifications.py:162 msgid "Open link" -msgstr "" +msgstr "링크 열기" #: plugin/builtin/integration/currency_exchange.py:22 msgid "InvenTree Currency Exchange" -msgstr "" +msgstr "InvenTree 환율" #: plugin/builtin/integration/currency_exchange.py:23 msgid "Default currency exchange integration" -msgstr "" +msgstr "기본 환율 통합" #: plugin/builtin/integration/machine_types.py:15 msgid "InvenTree Machines" -msgstr "" +msgstr "InvenTree 머신" #: plugin/builtin/integration/machine_types.py:16 msgid "Built-in machine types for InvenTree" -msgstr "" +msgstr "InvenTree용 내장 머신 유형" #: plugin/builtin/integration/part_notifications.py:20 msgid "Part Notifications" -msgstr "" +msgstr "부품 알림" #: plugin/builtin/integration/part_notifications.py:22 msgid "Notify users about part changes" -msgstr "" +msgstr "부품 변경 사항을 사용자에게 알립니다" #: plugin/builtin/integration/part_notifications.py:27 msgid "Send notifications" -msgstr "" +msgstr "알림 보내기" #: plugin/builtin/integration/part_notifications.py:28 msgid "Send notifications for part changes to subscribed users" -msgstr "" +msgstr "구독한 사용자에게 부품 변경 알림을 보냅니다" #: plugin/builtin/integration/part_notifications.py:45 msgid "Changed part notification" -msgstr "" +msgstr "부품 변경 알림" #: plugin/builtin/integration/part_notifications.py:55 #, python-brace-format msgid "The part `{part.name}` has been triggered with a `{part_action}` event" -msgstr "" +msgstr "부품 `{part.name}`에서 `{part_action}` 이벤트가 트리거되었습니다" #: plugin/builtin/labels/inventree_label.py:23 msgid "InvenTree PDF label printer" -msgstr "" +msgstr "InvenTree PDF 라벨 프린터" #: plugin/builtin/labels/inventree_label.py:24 msgid "Provides native support for printing PDF labels" -msgstr "" +msgstr "PDF 라벨 인쇄에 대한 기본 지원을 제공합니다" #: plugin/builtin/labels/inventree_label.py:32 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" -msgstr "" +msgstr "디버그 모드" #: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" -msgstr "" +msgstr "디버그 모드를 활성화하면 PDF 대신 원본 HTML을 반환합니다" #: plugin/builtin/labels/inventree_machine.py:61 msgid "InvenTree machine label printer" -msgstr "" +msgstr "InvenTree 머신 라벨 프린터" #: plugin/builtin/labels/inventree_machine.py:62 msgid "Provides support for printing using a machine" -msgstr "" +msgstr "머신을 사용한 인쇄를 지원합니다" #: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" -msgstr "" +msgstr "마지막 사용" #: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" -msgstr "" +msgstr "옵션" #: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" -msgstr "" +msgstr "라벨 시트의 페이지 크기" #: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" -msgstr "" +msgstr "라벨 건너뛰기" #: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" -msgstr "" +msgstr "라벨 시트를 인쇄할 때 이 개수만큼의 라벨을 건너뜁니다" #: plugin/builtin/labels/label_sheet.py:43 msgid "Border" -msgstr "" +msgstr "테두리" #: plugin/builtin/labels/label_sheet.py:44 msgid "Print a border around each label" -msgstr "" +msgstr "각 라벨 주위에 테두리를 인쇄합니다" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" -msgstr "" +msgstr "가로" #: plugin/builtin/labels/label_sheet.py:50 msgid "Print the label sheet in landscape mode" -msgstr "" +msgstr "라벨 시트를 가로 모드로 인쇄합니다" #: plugin/builtin/labels/label_sheet.py:55 msgid "Page Margin" -msgstr "" +msgstr "페이지 여백" #: plugin/builtin/labels/label_sheet.py:56 msgid "Margin around the page in mm" -msgstr "" +msgstr "페이지 가장자리 여백(mm)" #: plugin/builtin/labels/label_sheet.py:69 msgid "InvenTree Label Sheet Printer" -msgstr "" +msgstr "InvenTree 라벨 시트 프린터" #: plugin/builtin/labels/label_sheet.py:70 msgid "Arrays multiple labels onto a single sheet" -msgstr "" +msgstr "여러 라벨을 한 장의 시트에 배열합니다" #: plugin/builtin/labels/label_sheet.py:122 msgid "Label is too large for page size" -msgstr "" +msgstr "라벨이 페이지 크기에 비해 너무 큽니다" #: plugin/builtin/labels/label_sheet.py:161 msgid "No labels were generated" -msgstr "" +msgstr "생성된 라벨이 없습니다" #: plugin/builtin/suppliers/digikey.py:17 msgid "Supplier Integration - DigiKey" -msgstr "" +msgstr "공급업체 통합 - DigiKey" #: plugin/builtin/suppliers/digikey.py:18 msgid "Provides support for scanning DigiKey barcodes" -msgstr "" +msgstr "DigiKey 바코드 스캔을 지원합니다" #: plugin/builtin/suppliers/digikey.py:27 msgid "The Supplier which acts as 'DigiKey'" -msgstr "" +msgstr "'DigiKey' 역할을 하는 공급업체" #: plugin/builtin/suppliers/lcsc.py:19 msgid "Supplier Integration - LCSC" -msgstr "" +msgstr "공급업체 통합 - LCSC" #: plugin/builtin/suppliers/lcsc.py:20 msgid "Provides support for scanning LCSC barcodes" -msgstr "" +msgstr "LCSC 바코드 스캔을 지원합니다" #: plugin/builtin/suppliers/lcsc.py:28 msgid "The Supplier which acts as 'LCSC'" -msgstr "" +msgstr "'LCSC' 역할을 하는 공급업체" #: plugin/builtin/suppliers/mouser.py:17 msgid "Supplier Integration - Mouser" -msgstr "" +msgstr "공급업체 통합 - Mouser" #: plugin/builtin/suppliers/mouser.py:18 msgid "Provides support for scanning Mouser barcodes" -msgstr "" +msgstr "Mouser 바코드 스캔을 지원합니다" #: plugin/builtin/suppliers/mouser.py:26 msgid "The Supplier which acts as 'Mouser'" -msgstr "" +msgstr "'Mouser' 역할을 하는 공급업체" #: plugin/builtin/suppliers/tme.py:19 msgid "Supplier Integration - TME" -msgstr "" +msgstr "공급업체 통합 - TME" #: plugin/builtin/suppliers/tme.py:20 msgid "Provides support for scanning TME barcodes" -msgstr "" +msgstr "TME 바코드 스캔을 지원합니다" #: plugin/builtin/suppliers/tme.py:28 msgid "The Supplier which acts as 'TME'" -msgstr "" +msgstr "'TME' 역할을 하는 공급업체" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "슈퍼유저 계정만 플러그인을 관리할 수 있습니다" #: plugin/installer.py:243 msgid "Plugin installation is disabled" -msgstr "" +msgstr "플러그인 설치가 비활성화되어 있습니다" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "설치할 패키지 이름 또는 URL이 제공되지 않았습니다" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "패키지 이름 또는 URL에 잘못된 문자가 있습니다" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" -msgstr "" +msgstr "플러그인을 성공적으로 설치했습니다" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" -msgstr "" +msgstr "플러그인을 {path}에 설치했습니다" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" -msgstr "" +msgstr "레지스트리에서 플러그인을 찾을 수 없습니다" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" -msgstr "" +msgstr "플러그인이 패키지 플러그인이 아닙니다" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" -msgstr "" +msgstr "플러그인 패키지 이름을 찾을 수 없습니다" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" -msgstr "" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "스태프 사용자만 플러그인을 관리할 수 있습니다" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" -msgstr "" +msgid "Plugin uninstalling is disabled" +msgstr "플러그인 제거가 비활성화되어 있습니다" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" -msgstr "" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" +msgstr "플러그인이 현재 활성 상태이므로 제거할 수 없습니다" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "플러그인이 필수이므로 제거할 수 없습니다" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "플러그인이 샘플 플러그인이므로 제거할 수 없습니다" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" -msgstr "" +msgstr "플러그인이 내장 플러그인이므로 제거할 수 없습니다" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" -msgstr "" +msgstr "플러그인이 설치되어 있지 않습니다" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" -msgstr "" +msgstr "플러그인 설치 정보를 찾을 수 없습니다" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" -msgstr "" +msgstr "플러그인을 성공적으로 제거했습니다" #: plugin/models.py:39 msgid "Plugin Configuration" -msgstr "" +msgstr "플러그인 구성" #: plugin/models.py:40 msgid "Plugin Configurations" -msgstr "" +msgstr "플러그인 구성" #: plugin/models.py:47 msgid "Key of plugin" -msgstr "" +msgstr "플러그인 키" #: plugin/models.py:55 msgid "Name of the plugin" -msgstr "" +msgstr "플러그인 이름" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" -msgstr "" +msgstr "패키지 이름" #: plugin/models.py:64 msgid "Name of the installed package, if the plugin was installed via PIP" -msgstr "" +msgstr "PIP로 플러그인을 설치한 경우, 설치된 패키지의 이름" #: plugin/models.py:69 msgid "Is the plugin active" -msgstr "" +msgstr "플러그인이 활성 상태인지 여부" #: plugin/models.py:176 msgid "Sample plugin" -msgstr "" +msgstr "샘플 플러그인" #: plugin/models.py:184 msgid "Builtin Plugin" -msgstr "" +msgstr "내장 플러그인" #: plugin/models.py:192 msgid "Mandatory Plugin" -msgstr "" +msgstr "필수 플러그인" #: plugin/models.py:210 msgid "Package Plugin" -msgstr "" +msgstr "패키지 플러그인" #: plugin/models.py:301 plugin/models.py:347 msgid "Plugin" -msgstr "" +msgstr "플러그인" #: plugin/plugin.py:389 msgid "No author found" -msgstr "" +msgstr "작성자를 찾을 수 없습니다" #: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" -msgstr "" +msgstr "플러그인 '{p}'은(는) 현재 InvenTree 버전 {v}와 호환되지 않습니다" #: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" -msgstr "" +msgstr "플러그인은 최소 버전 {v}가 필요합니다" #: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" -msgstr "" +msgstr "플러그인은 최대 버전 {v}까지 지원합니다" #: plugin/samples/integration/sample.py:52 msgid "User Setting 1" -msgstr "" +msgstr "사용자 설정 1" #: plugin/samples/integration/sample.py:53 msgid "A user setting that can be changed by the user" -msgstr "" +msgstr "사용자가 변경할 수 있는 사용자 설정" #: plugin/samples/integration/sample.py:57 msgid "User Setting 2" -msgstr "" +msgstr "사용자 설정 2" #: plugin/samples/integration/sample.py:58 msgid "Another user setting" -msgstr "" +msgstr "또 다른 사용자 설정" #: plugin/samples/integration/sample.py:63 msgid "User Setting 3" -msgstr "" +msgstr "사용자 설정 3" #: plugin/samples/integration/sample.py:64 msgid "A user setting with choices" -msgstr "" +msgstr "선택지가 있는 사용자 설정" #: plugin/samples/integration/sample.py:72 msgid "Enable PO" -msgstr "" +msgstr "구매 주문(PO) 활성화" #: plugin/samples/integration/sample.py:73 msgid "Enable PO functionality in InvenTree interface" -msgstr "" +msgstr "InvenTree 인터페이스에서 구매 주문(PO) 기능을 활성화합니다" #: plugin/samples/integration/sample.py:78 msgid "API Key" -msgstr "" +msgstr "API 키" #: plugin/samples/integration/sample.py:79 msgid "Key required for accessing external API" -msgstr "" +msgstr "외부 API에 접근하기 위한 키" #: plugin/samples/integration/sample.py:83 msgid "Numerical" -msgstr "" +msgstr "숫자" #: plugin/samples/integration/sample.py:84 msgid "A numerical setting" -msgstr "" +msgstr "숫자 설정" #: plugin/samples/integration/sample.py:90 msgid "Choice Setting" -msgstr "" +msgstr "선택 설정" #: plugin/samples/integration/sample.py:91 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 msgid "InvenTree Contributors" -msgstr "" +msgstr "InvenTree 기여자" #: plugin/samples/integration/user_interface_sample.py:27 msgid "Enable Part Panels" -msgstr "" +msgstr "부품 패널 활성화" #: plugin/samples/integration/user_interface_sample.py:28 msgid "Enable custom panels for Part views" -msgstr "" +msgstr "부품 보기용 사용자 정의 패널을 활성화합니다" #: plugin/samples/integration/user_interface_sample.py:33 msgid "Enable Purchase Order Panels" -msgstr "" +msgstr "구매 주문 패널 활성화" #: plugin/samples/integration/user_interface_sample.py:34 msgid "Enable custom panels for Purchase Order views" -msgstr "" +msgstr "구매 주문 보기용 사용자 정의 패널을 활성화합니다" #: plugin/samples/integration/user_interface_sample.py:39 msgid "Enable Broken Panels" -msgstr "" +msgstr "손상된 패널 활성화" #: plugin/samples/integration/user_interface_sample.py:40 msgid "Enable broken panels for testing" -msgstr "" +msgstr "테스트를 위해 손상된 패널을 활성화합니다" #: plugin/samples/integration/user_interface_sample.py:45 msgid "Enable Dynamic Panel" -msgstr "" +msgstr "동적 패널 활성화" #: plugin/samples/integration/user_interface_sample.py:46 msgid "Enable dynamic panels for testing" -msgstr "" +msgstr "테스트를 위해 동적 패널을 활성화합니다" #: plugin/samples/integration/user_interface_sample.py:114 msgid "Part Panel" -msgstr "" +msgstr "부품 패널" #: plugin/samples/integration/user_interface_sample.py:149 msgid "Broken Dashboard Item" -msgstr "" +msgstr "손상된 대시보드 항목" #: plugin/samples/integration/user_interface_sample.py:151 msgid "This is a broken dashboard item - it will not render!" -msgstr "" +msgstr "이것은 손상된 대시보드 항목입니다. 렌더링되지 않습니다!" #: plugin/samples/integration/user_interface_sample.py:157 msgid "Sample Dashboard Item" -msgstr "" +msgstr "샘플 대시보드 항목" #: plugin/samples/integration/user_interface_sample.py:159 msgid "This is a sample dashboard item. It renders a simple string of HTML content." -msgstr "" +msgstr "이것은 샘플 대시보드 항목입니다. 단순한 HTML 문자열 콘텐츠를 렌더링합니다." #: plugin/samples/integration/user_interface_sample.py:165 msgid "Context Dashboard Item" -msgstr "" +msgstr "컨텍스트 대시보드 항목" #: plugin/samples/integration/user_interface_sample.py:179 msgid "Admin Dashboard Item" -msgstr "" +msgstr "관리자 대시보드 항목" #: plugin/samples/integration/user_interface_sample.py:180 msgid "This is an admin-only dashboard item." -msgstr "" +msgstr "이것은 관리자 전용 대시보드 항목입니다." #: plugin/serializers.py:86 msgid "Source File" -msgstr "" +msgstr "소스 파일" #: plugin/serializers.py:87 msgid "Path to the source file for admin integration" -msgstr "" +msgstr "관리자 통합을 위한 소스 파일 경로" #: plugin/serializers.py:94 msgid "Optional context data for the admin integration" -msgstr "" +msgstr "관리자 통합을 위한 선택적 컨텍스트 데이터" #: plugin/serializers.py:110 msgid "Source URL" -msgstr "" +msgstr "소스 URL" #: plugin/serializers.py:112 msgid "Source for the package - this can be a custom registry or a VCS path" -msgstr "" +msgstr "패키지 소스입니다. 사용자 정의 레지스트리 또는 VCS 경로가 될 수 있습니다" #: plugin/serializers.py:121 msgid "Name for the Plugin Package - can also contain a version indicator" -msgstr "" +msgstr "플러그인 패키지 이름입니다. 버전 표기를 포함할 수도 있습니다" #: plugin/serializers.py:128 msgid "Version" -msgstr "" +msgstr "버전" #: plugin/serializers.py:130 msgid "Version specifier for the plugin. Leave blank for latest version." -msgstr "" +msgstr "플러그인 버전 지정자입니다. 최신 버전이면 비워 두세요." #: plugin/serializers.py:135 msgid "Confirm plugin installation" -msgstr "" +msgstr "플러그인 설치 확인" #: plugin/serializers.py:137 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." -msgstr "" +msgstr "이 플러그인을 현재 인스턴스에 지금 설치합니다. 인스턴스는 유지보수 모드로 전환됩니다." #: plugin/serializers.py:150 msgid "Installation not confirmed" -msgstr "" +msgstr "설치가 확인되지 않았습니다" #: plugin/serializers.py:152 msgid "Either packagename or URL must be provided" -msgstr "" +msgstr "패키지 이름 또는 URL 중 하나는 제공되어야 합니다" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" -msgstr "" +msgstr "전체 다시 로드" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" -msgstr "" +msgstr "플러그인 레지스트리를 전체 다시 로드합니다" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" -msgstr "" +msgstr "강제 다시 로드" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" -msgstr "" +msgstr "이미 로드되어 있더라도 플러그인 레지스트리를 강제로 다시 로드합니다" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" -msgstr "" +msgstr "플러그인 수집" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" -msgstr "" +msgstr "플러그인을 수집하여 레지스트리에 추가합니다" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" -msgstr "" +msgstr "플러그인 활성화" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" -msgstr "" +msgstr "이 플러그인을 활성화합니다" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" -msgstr "" +msgstr "필수 플러그인은 비활성화할 수 없습니다" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" -msgstr "" +msgstr "구성 삭제" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" -msgstr "" +msgstr "데이터베이스에서 플러그인 구성을 삭제합니다" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" -msgstr "" +msgstr "이 설정이 적용될 사용자" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" -msgstr "" +msgstr "항목" #: report/api.py:115 msgid "Plugin not found" -msgstr "" +msgstr "플러그인을 찾을 수 없습니다" #: report/api.py:117 msgid "Plugin does not support label printing" -msgstr "" +msgstr "플러그인이 라벨 인쇄를 지원하지 않습니다" #: report/api.py:165 msgid "Invalid label dimensions" -msgstr "" +msgstr "잘못된 라벨 크기입니다" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" -msgstr "" +msgstr "템플릿에 유효한 항목이 제공되지 않았습니다" #: report/helpers.py:43 msgid "A4" -msgstr "" +msgstr "A4" #: report/helpers.py:44 msgid "A3" -msgstr "" +msgstr "A3" #: report/helpers.py:45 msgid "Legal" -msgstr "" +msgstr "Legal" #: report/helpers.py:46 msgid "Letter" -msgstr "" +msgstr "Letter" #: report/models.py:128 msgid "Template file with this name already exists" -msgstr "" +msgstr "이 이름의 템플릿 파일이 이미 존재합니다" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" -msgstr "" +msgstr "템플릿 이름" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" -msgstr "" +msgstr "템플릿 설명" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" -msgstr "" +msgstr "리비전 번호(자동 증가)" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" -msgstr "" +msgstr "인쇄 시 모델에 첨부" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" -msgstr "" +msgstr "인쇄 시 보고서 출력물을 연결된 모델 인스턴스에 첨부파일로 저장합니다" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" -msgstr "" +msgstr "파일명 패턴" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" -msgstr "" +msgstr "파일명을 생성하기 위한 패턴" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" -msgstr "" +msgstr "템플릿이 활성화됨" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" -msgstr "" +msgstr "템플릿 대상 모델 유형" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" -msgstr "" +msgstr "필터" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" -msgstr "" +msgstr "템플릿 쿼리 필터(쉼표로 구분된 key=value 쌍 목록)" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" -msgstr "" +msgstr "템플릿 파일" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" -msgstr "" +msgstr "PDF 보고서 페이지 크기" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" -msgstr "" +msgstr "보고서를 가로 방향으로 렌더링" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" -msgstr "" +msgstr "병합" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" -msgstr "" +msgstr "선택한 항목에 대해 단일 보고서를 렌더링합니다" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" -msgstr "" +msgstr "템플릿 {self.name}에서 생성된 보고서" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" -msgstr "" +msgstr "템플릿 구문 오류" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" -msgstr "" +msgstr "보고서 렌더링 오류" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" -msgstr "" +msgstr "보고서 생성 오류" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" -msgstr "" +msgstr "보고서 출력 병합 오류" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" -msgstr "" +msgstr "너비 [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" -msgstr "" +msgstr "라벨 너비(mm)" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" -msgstr "" +msgstr "높이 [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" -msgstr "" +msgstr "라벨 높이(mm)" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" -msgstr "" +msgstr "라벨 인쇄 오류" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" -msgstr "" +msgstr "스니펫" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" -msgstr "" +msgstr "보고서 스니펫 파일" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" -msgstr "" +msgstr "스니펫 파일 설명" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" -msgstr "" +msgstr "자산" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" -msgstr "" +msgstr "보고서 자산 파일" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" -msgstr "" +msgstr "자산 파일 설명" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "보고서 템플릿을 저장하려면 사용자 인증이 필요합니다" + +#: report/serializers.py:118 msgid "Select report template" -msgstr "" +msgstr "보고서 템플릿 선택" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" -msgstr "" +msgstr "보고서에 포함할 항목의 기본 키 목록" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" -msgstr "" +msgstr "라벨 템플릿 선택" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" -msgstr "" +msgstr "인쇄 플러그인" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" -msgstr "" +msgstr "라벨 인쇄에 사용할 플러그인을 선택하세요" #: report/templates/label/part_label.html:31 #: report/templates/label/stockitem_qr.html:21 #: report/templates/label/stocklocation_qr.html:20 msgid "QR Code" -msgstr "" +msgstr "QR 코드" #: report/templates/label/part_label_code128.html:31 #: report/templates/label/stocklocation_qr_and_text.html:31 msgid "QR code" -msgstr "" +msgstr "QR 코드" #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" -msgstr "" +msgstr "자재 명세서" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" -msgstr "" +msgstr "필요한 자재" #: report/templates/report/inventree_build_order_report.html:98 #: report/templates/report/inventree_purchase_order_report.html:47 @@ -8165,43 +8226,43 @@ msgstr "" #: report/templates/report/inventree_test_report.html:84 #: report/templates/report/inventree_test_report.html:162 msgid "Part image" -msgstr "" +msgstr "부품 이미지" #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" -msgstr "" +msgstr "지급됨" #: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" -msgstr "" +msgstr "필요 대상" #: report/templates/report/inventree_build_order_report.html:152 msgid "Issued By" -msgstr "" +msgstr "지급자" #: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" -msgstr "" +msgstr "공급업체가 삭제되었습니다" #: report/templates/report/inventree_purchase_order_report.html:22 msgid "Order Details" -msgstr "" +msgstr "주문 상세" #: report/templates/report/inventree_purchase_order_report.html:37 #: report/templates/report/inventree_sales_order_report.html:30 msgid "Unit Price" -msgstr "" +msgstr "단가" #: report/templates/report/inventree_purchase_order_report.html:62 #: report/templates/report/inventree_return_order_report.html:48 #: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" -msgstr "" +msgstr "추가 라인 항목" #: report/templates/report/inventree_purchase_order_report.html:79 #: report/templates/report/inventree_sales_order_report.html:72 msgid "Total" -msgstr "" +msgstr "합계" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 @@ -8209,1069 +8270,1069 @@ msgstr "" #: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" -msgstr "" +msgstr "시리얼 번호" #: report/templates/report/inventree_sales_order_shipment_report.html:23 msgid "Allocations" -msgstr "" +msgstr "할당" #: report/templates/report/inventree_sales_order_shipment_report.html:47 #: templates/email/stale_stock_notification.html:20 msgid "Batch" -msgstr "" +msgstr "배치" #: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" -msgstr "" +msgstr "재고 위치 항목" #: report/templates/report/inventree_stock_report_merge.html:21 #: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" -msgstr "" +msgstr "재고 품목 테스트 보고서" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" -msgstr "" +msgstr "설치된 항목" #: report/templates/report/inventree_stock_report_merge.html:111 #: report/templates/report/inventree_test_report.html:167 msgid "Serial" -msgstr "" +msgstr "시리얼" #: report/templates/report/inventree_test_report.html:97 msgid "Test Results" -msgstr "" +msgstr "테스트 결과" #: report/templates/report/inventree_test_report.html:102 msgid "Test" -msgstr "" +msgstr "테스트" #: report/templates/report/inventree_test_report.html:129 msgid "Pass" -msgstr "" +msgstr "통과" #: report/templates/report/inventree_test_report.html:131 msgid "Fail" -msgstr "" +msgstr "실패" #: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" -msgstr "" +msgstr "결과 없음(필수)" #: report/templates/report/inventree_test_report.html:140 msgid "No result" -msgstr "" +msgstr "결과 없음" #: report/templatetags/report.py:166 msgid "Invalid media file path" -msgstr "" +msgstr "잘못된 미디어 파일 경로" #: report/templatetags/report.py:185 msgid "Invalid static file path" -msgstr "" +msgstr "잘못된 정적 파일 경로" #: report/templatetags/report.py:287 msgid "Asset file not found" -msgstr "" +msgstr "자산 파일을 찾을 수 없습니다" #: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" -msgstr "" +msgstr "이미지 파일을 찾을 수 없습니다" #: report/templatetags/report.py:430 msgid "No image file specified" -msgstr "" +msgstr "이미지 파일이 지정되지 않았습니다" #: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" -msgstr "" +msgstr "part_image 태그에는 Part 인스턴스가 필요합니다" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" -msgstr "" +msgstr "company_image 태그에는 Company 인스턴스가 필요합니다" #: stock/api.py:287 msgid "Filter by location depth" -msgstr "" +msgstr "위치 깊이로 필터" #: stock/api.py:307 msgid "Filter by top-level locations" -msgstr "" +msgstr "최상위 위치로 필터" #: stock/api.py:322 msgid "Include sub-locations in filtered results" -msgstr "" +msgstr "필터 결과에 하위 위치를 포함합니다" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" -msgstr "" +msgstr "상위 위치" #: stock/api.py:344 msgid "Filter by parent location" -msgstr "" +msgstr "상위 위치로 필터" #: stock/api.py:604 msgid "Part name (case insensitive)" -msgstr "" +msgstr "부품명(대소문자 구분 없음)" #: stock/api.py:610 msgid "Part name contains (case insensitive)" -msgstr "" +msgstr "부품명 포함(대소문자 구분 없음)" #: stock/api.py:616 msgid "Part name (regex)" -msgstr "" +msgstr "부품명(정규식)" #: stock/api.py:621 msgid "Part IPN (case insensitive)" -msgstr "" +msgstr "부품 IPN(대소문자 구분 없음)" #: stock/api.py:627 msgid "Part IPN contains (case insensitive)" -msgstr "" +msgstr "부품 IPN 포함(대소문자 구분 없음)" #: stock/api.py:633 msgid "Part IPN (regex)" -msgstr "" +msgstr "부품 IPN(정규식)" #: stock/api.py:645 msgid "Minimum stock" -msgstr "" +msgstr "최소 재고" #: stock/api.py:649 msgid "Maximum stock" -msgstr "" +msgstr "최대 재고" #: stock/api.py:652 msgid "Status Code" -msgstr "" +msgstr "상태 코드" #: stock/api.py:692 msgid "External Location" -msgstr "" +msgstr "외부 위치" #: stock/api.py:791 msgid "Consumed by Build Order" -msgstr "" +msgstr "작업 지시서에서 소비됨" #: stock/api.py:801 msgid "Installed in other stock item" -msgstr "" +msgstr "다른 재고 품목에 설치됨" #: stock/api.py:890 msgid "Part Tree" -msgstr "" +msgstr "부품 트리" #: stock/api.py:912 msgid "Updated before" -msgstr "" +msgstr "업데이트 날짜 이전" #: stock/api.py:916 msgid "Updated after" -msgstr "" +msgstr "업데이트 날짜 이후" #: stock/api.py:920 msgid "Stocktake Before" -msgstr "" +msgstr "재고조사 날짜 이전" #: stock/api.py:924 msgid "Stocktake After" -msgstr "" +msgstr "재고조사 날짜 이후" #: stock/api.py:929 msgid "Expiry date before" -msgstr "" +msgstr "유효기간 날짜 이전" #: stock/api.py:933 msgid "Expiry date after" -msgstr "" +msgstr "유효기간 날짜 이후" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" -msgstr "" +msgstr "장기 재고" #: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" -msgstr "" +msgstr "제외할 재고 품목 PK를 제공하면 해당 품목과 모든 하위 항목을 제외합니다" #: stock/api.py:980 msgid "Cascade Locations" -msgstr "" +msgstr "위치 계단식 적용" #: stock/api.py:981 msgid "If true, include items in child locations of the given location" -msgstr "" +msgstr "true이면 지정한 위치의 하위 위치에 있는 항목을 포함합니다" #: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" -msgstr "" +msgstr "숫자 Location ID 또는 'null' 리터럴로 필터" #: stock/api.py:1087 msgid "Quantity is required" -msgstr "" +msgstr "수량이 필요합니다" #: stock/api.py:1092 msgid "Valid part must be supplied" -msgstr "" +msgstr "유효한 부품을 제공해야 합니다" #: stock/api.py:1123 msgid "The given supplier part does not exist" -msgstr "" +msgstr "지정한 공급업체 부품이 존재하지 않습니다" #: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" -msgstr "" +msgstr "공급업체 부품에 포장 단위가 정의되어 있지만 use_pack_size 플래그가 설정되지 않았습니다" #: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" -msgstr "" +msgstr "추적 불가능한 부품에는 시리얼 번호를 제공할 수 없습니다" #: stock/api.py:1409 msgid "Include Installed" -msgstr "" +msgstr "설치된 항목 포함" #: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" -msgstr "" +msgstr "true이면 지정한 재고 품목 아래에 설치된 항목의 테스트 결과를 포함합니다" #: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" -msgstr "" +msgstr "숫자 재고 품목 ID로 필터" #: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" -msgstr "" +msgstr "ID가 {id}인 재고 품목이 존재하지 않습니다" #: stock/api.py:1516 msgid "Include Part Variants" -msgstr "" +msgstr "부품 변형 포함" #: stock/api.py:1546 msgid "Date after" -msgstr "" +msgstr "날짜 이후" #: stock/api.py:1550 msgid "Date before" -msgstr "" +msgstr "날짜 이전" #: stock/models.py:73 msgid "Stock Location type" -msgstr "" +msgstr "재고 위치 유형" #: stock/models.py:74 msgid "Stock Location types" -msgstr "" +msgstr "재고 위치 유형" #: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" -msgstr "" +msgstr "아이콘이 설정되지 않은 모든 위치에 대한 기본 아이콘(선택)" #: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" -msgstr "" +msgstr "재고 위치" #: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" -msgstr "" +msgstr "재고 위치" #: stock/models.py:197 stock/models.py:1217 msgid "Owner" -msgstr "" +msgstr "소유자" #: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" -msgstr "" +msgstr "소유자 선택" #: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" +msgstr "재고 품목은 구조적 재고 위치에 직접 배치할 수 없으며, 하위 위치에 배치할 수 있습니다." #: stock/models.py:213 users/models.py:497 msgid "External" -msgstr "" +msgstr "외부" #: stock/models.py:214 msgid "This is an external stock location" -msgstr "" +msgstr "외부 재고 위치입니다" #: stock/models.py:220 msgid "Location type" -msgstr "" +msgstr "위치 유형" #: stock/models.py:224 msgid "Stock location type of this location" -msgstr "" +msgstr "이 위치의 재고 위치 유형" #: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" +msgstr "일부 재고 품목이 이미 이 위치에 있으므로 이 재고 위치를 구조적 위치로 만들 수 없습니다!" #: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" -msgstr "" +msgstr "{field}이(가) 존재하지 않습니다" #: stock/models.py:598 msgid "Part must be specified" -msgstr "" +msgstr "부품을 지정해야 합니다" #: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" -msgstr "" +msgstr "재고 품목은 구조적 재고 위치에 배치할 수 없습니다!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" -msgstr "" +msgstr "가상 부품에 대해 재고 품목을 생성할 수 없습니다" #: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" -msgstr "" +msgstr "부품 유형('{self.supplier_part.part}')은(는) {self.part}여야 합니다" #: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" -msgstr "" +msgstr "시리얼 번호가 있는 품목의 수량은 1이어야 합니다" #: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" +msgstr "수량이 1보다 크면 시리얼 번호를 설정할 수 없습니다" #: stock/models.py:990 msgid "Item cannot belong to itself" -msgstr "" +msgstr "항목은 자기 자신에 속할 수 없습니다" #: stock/models.py:995 msgid "Item must have a build reference if is_building=True" -msgstr "" +msgstr "is_building=True인 경우 항목에는 제조 참조가 있어야 합니다" #: stock/models.py:1008 msgid "Build reference does not point to the same part object" -msgstr "" +msgstr "제조 참조가 동일한 부품 객체를 가리키지 않습니다" #: stock/models.py:1022 msgid "Parent Stock Item" -msgstr "" +msgstr "상위 재고 품목" #: stock/models.py:1034 msgid "Base part" -msgstr "" +msgstr "기본 부품" #: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" -msgstr "" +msgstr "이 재고 품목에 맞는 공급업체 부품을 선택하세요" #: stock/models.py:1056 msgid "Where is this stock item located?" -msgstr "" +msgstr "이 재고 품목은 어디에 있습니까?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" -msgstr "" +msgstr "이 재고 품목이 보관된 포장재" #: stock/models.py:1070 msgid "Installed In" -msgstr "" +msgstr "설치 위치" #: stock/models.py:1075 msgid "Is this item installed in another item?" -msgstr "" +msgstr "이 항목이 다른 항목에 설치되어 있습니까?" #: stock/models.py:1094 msgid "Serial number for this item" -msgstr "" +msgstr "이 항목의 시리얼 번호" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" -msgstr "" +msgstr "이 재고 품목의 배치 코드" #: stock/models.py:1116 msgid "Stock Quantity" -msgstr "" +msgstr "재고 수량" #: stock/models.py:1126 msgid "Source Build" -msgstr "" +msgstr "원본 제조" #: stock/models.py:1129 msgid "Build for this stock item" -msgstr "" +msgstr "이 재고 품목의 제조" #: stock/models.py:1136 msgid "Consumed By" -msgstr "" +msgstr "소비한 대상" #: stock/models.py:1139 msgid "Build order which consumed this stock item" -msgstr "" +msgstr "이 재고 품목을 소비한 제조 주문" #: stock/models.py:1148 msgid "Source Purchase Order" -msgstr "" +msgstr "원본 구매 주문" #: stock/models.py:1152 msgid "Purchase order for this stock item" -msgstr "" +msgstr "이 재고 품목의 구매 주문" #: stock/models.py:1158 msgid "Destination Sales Order" -msgstr "" +msgstr "대상 판매 주문" #: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" -msgstr "" +msgstr "재고 품목의 유효기간입니다. 이 날짜 이후 재고는 만료로 간주됩니다" #: stock/models.py:1187 msgid "Delete on deplete" -msgstr "" +msgstr "소진 시 삭제" #: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" -msgstr "" +msgstr "재고가 소진되면 이 재고 품목을 삭제합니다" #: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" -msgstr "" +msgstr "구매 시점의 단위 구매 가격" #: stock/models.py:1240 msgid "Converted to part" -msgstr "" +msgstr "부품으로 변환됨" #: stock/models.py:1442 msgid "Quantity exceeds available stock" -msgstr "" +msgstr "수량이 사용 가능한 재고를 초과합니다" #: stock/models.py:1893 msgid "Part is not set as trackable" -msgstr "" +msgstr "부품이 추적으로 설정되어 있지 않습니다" #: stock/models.py:1899 msgid "Quantity must be integer" -msgstr "" +msgstr "수량은 정수여야 합니다" #: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" -msgstr "" +msgstr "수량은 사용 가능한 재고 수량({self.quantity})을 초과할 수 없습니다" #: stock/models.py:1913 msgid "Serial numbers must be provided as a list" -msgstr "" +msgstr "시리얼 번호는 목록으로 제공되어야 합니다" #: stock/models.py:1918 msgid "Quantity does not match serial numbers" -msgstr "" +msgstr "수량이 시리얼 번호와 일치하지 않습니다" #: stock/models.py:1936 msgid "Cannot assign stock to structural location" -msgstr "" +msgstr "구조적 위치에 재고를 할당할 수 없습니다" #: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" -msgstr "" +msgstr "테스트 템플릿이 존재하지 않습니다" #: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" -msgstr "" +msgstr "재고 품목이 판매 주문에 할당되었습니다" #: stock/models.py:2075 msgid "Stock item is installed in another item" -msgstr "" +msgstr "재고 품목이 다른 품목에 설치되어 있습니다" #: stock/models.py:2078 msgid "Stock item contains other items" -msgstr "" +msgstr "재고 품목에 다른 품목이 포함되어 있습니다" #: stock/models.py:2081 msgid "Stock item has been assigned to a customer" -msgstr "" +msgstr "재고 품목이 고객에게 할당되었습니다" #: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" -msgstr "" +msgstr "재고 품목이 현재 생산 중입니다" #: stock/models.py:2087 msgid "Serialized stock cannot be merged" -msgstr "" +msgstr "시리얼 추적 재고는 병합할 수 없습니다" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" -msgstr "" +msgstr "중복 재고 품목" #: stock/models.py:2098 msgid "Stock items must refer to the same part" -msgstr "" +msgstr "재고 품목은 동일한 부품을 참조해야 합니다" #: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" -msgstr "" +msgstr "재고 항목은 동일한 공급업체 부품을 참조해야 합니다" #: stock/models.py:2111 msgid "Stock status codes must match" -msgstr "" +msgstr "재고 상태 코드는 일치해야 합니다" #: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" -msgstr "" +msgstr "재고에 없으므로 재고 항목을 이동할 수 없습니다" #: stock/models.py:2905 msgid "Stock Item Tracking" -msgstr "" +msgstr "재고 항목 추적" #: stock/models.py:2955 msgid "Entry notes" -msgstr "" +msgstr "항목 메모" #: stock/models.py:2995 msgid "Stock Item Test Result" -msgstr "" +msgstr "재고 항목 테스트 결과" #: stock/models.py:3026 msgid "Value must be provided for this test" -msgstr "" +msgstr "이 테스트에는 값을 제공해야 합니다" #: stock/models.py:3030 msgid "Attachment must be uploaded for this test" -msgstr "" +msgstr "이 테스트에는 첨부 파일을 업로드해야 합니다" #: stock/models.py:3035 msgid "Invalid value for this test" -msgstr "" +msgstr "이 테스트의 값이 올바르지 않습니다" #: stock/models.py:3059 msgid "Test result" -msgstr "" +msgstr "테스트 결과" #: stock/models.py:3066 msgid "Test output value" -msgstr "" +msgstr "테스트 출력 값" #: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" -msgstr "" +msgstr "테스트 결과 첨부 파일" #: stock/models.py:3078 msgid "Test notes" -msgstr "" +msgstr "테스트 메모" #: stock/models.py:3086 msgid "Test station" -msgstr "" +msgstr "테스트 스테이션" #: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" -msgstr "" +msgstr "테스트가 수행된 테스트 스테이션의 식별자" #: stock/models.py:3093 msgid "Started" -msgstr "" +msgstr "시작됨" #: stock/models.py:3094 msgid "The timestamp of the test start" -msgstr "" +msgstr "테스트 시작 시각" #: stock/models.py:3100 msgid "Finished" -msgstr "" +msgstr "완료됨" #: stock/models.py:3101 msgid "The timestamp of the test finish" -msgstr "" +msgstr "테스트 종료 시각" #: stock/serializers.py:85 msgid "Generated batch code" -msgstr "" +msgstr "생성된 배치 코드" #: stock/serializers.py:94 msgid "Select build order" -msgstr "" +msgstr "제조 주문 선택" #: stock/serializers.py:103 msgid "Select stock item to generate batch code for" -msgstr "" +msgstr "배치 코드를 생성할 재고 항목을 선택하세요" #: stock/serializers.py:112 msgid "Select location to generate batch code for" -msgstr "" +msgstr "배치 코드를 생성할 위치를 선택하세요" #: stock/serializers.py:121 msgid "Select part to generate batch code for" -msgstr "" +msgstr "배치 코드를 생성할 부품을 선택하세요" #: stock/serializers.py:130 msgid "Select purchase order" -msgstr "" +msgstr "구매 주문 선택" #: stock/serializers.py:137 msgid "Enter quantity for batch code" -msgstr "" +msgstr "배치 코드 수량을 입력하세요" #: stock/serializers.py:163 msgid "Generated serial number" -msgstr "" +msgstr "생성된 일련 번호" #: stock/serializers.py:173 msgid "Select part to generate serial number for" -msgstr "" +msgstr "일련 번호를 생성할 부품을 선택하세요" #: stock/serializers.py:181 msgid "Quantity of serial numbers to generate" -msgstr "" +msgstr "생성할 일련 번호 수량" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" -msgstr "" +msgstr "이 결과의 테스트 템플릿" #: stock/serializers.py:289 msgid "No matching test found for this part" -msgstr "" +msgstr "이 부품에 일치하는 테스트를 찾을 수 없습니다" #: stock/serializers.py:293 msgid "Template ID or test name must be provided" -msgstr "" +msgstr "템플릿 ID 또는 테스트 이름을 제공해야 합니다" #: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" -msgstr "" +msgstr "테스트 종료 시각은 테스트 시작 시각보다 빠를 수 없습니다" #: stock/serializers.py:427 msgid "Parent Item" -msgstr "" +msgstr "상위 항목" #: stock/serializers.py:428 msgid "Parent stock item" -msgstr "" +msgstr "상위 재고 항목" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" -msgstr "" +msgstr "추가 시 포장 단위 사용: 입력한 수량은 포장 개수입니다" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" -msgstr "" +msgstr "포장 단위 사용" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" -msgstr "" +msgstr "새 항목의 일련 번호를 입력하세요" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" -msgstr "" +msgstr "공급업체 부품 번호" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" -msgstr "" +msgstr "만료됨" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" -msgstr "" +msgstr "하위 항목" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" -msgstr "" +msgstr "추적 항목" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" -msgstr "" +msgstr "이 재고 항목의 구매 가격(단위 또는 포장 기준)" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" -msgstr "" +msgstr "일련 번호를 부여할 재고 항목 수를 입력하세요" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" -msgstr "" +msgstr "재고 항목이 제공되지 않았습니다" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" -msgstr "" +msgstr "수량은 사용 가능한 재고 수량({q})을(를) 초과할 수 없습니다" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" -msgstr "" +msgstr "대상 재고 위치" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" -msgstr "" +msgstr "이 부품에는 일련 번호를 할당할 수 없습니다" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" -msgstr "" +msgstr "일련 번호가 이미 존재합니다" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" -msgstr "" - -#: stock/serializers.py:823 -msgid "Quantity to Install" -msgstr "" - -#: stock/serializers.py:824 -msgid "Enter the quantity of items to install" -msgstr "" - -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 -msgid "Add transaction note (optional)" -msgstr "" +msgstr "설치할 재고 항목을 선택하세요" #: stock/serializers.py:837 +msgid "Quantity to Install" +msgstr "설치 수량" + +#: stock/serializers.py:838 +msgid "Enter the quantity of items to install" +msgstr "설치할 항목 수량을 입력하세요" + +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 +msgid "Add transaction note (optional)" +msgstr "거래 메모 추가(선택 사항)" + +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" -msgstr "" +msgstr "설치 수량은 최소 1이어야 합니다" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" -msgstr "" +msgstr "재고 항목을 사용할 수 없습니다" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" -msgstr "" +msgstr "선택한 부품이 BOM(자재 명세서)에 없습니다" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" -msgstr "" +msgstr "설치 수량은 사용 가능한 수량을 초과할 수 없습니다" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" -msgstr "" +msgstr "미설치 항목의 대상 위치" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" -msgstr "" +msgstr "재고 항목을 변환할 부품을 선택하세요" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" -msgstr "" +msgstr "선택한 부품은 변환에 사용할 수 없는 옵션입니다" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" -msgstr "" +msgstr "공급업체 부품이 할당된 재고 항목은 변환할 수 없습니다" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" -msgstr "" +msgstr "재고 항목 상태 코드" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" -msgstr "" +msgstr "상태를 변경할 재고 항목을 선택하세요" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" -msgstr "" +msgstr "선택된 재고 항목이 없습니다" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" -msgstr "" +msgstr "하위 위치" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" -msgstr "" +msgstr "상위 재고 위치" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" -msgstr "" +msgstr "부품은 판매 가능해야 합니다" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" -msgstr "" +msgstr "항목이 판매 주문에 할당되어 있습니다" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" -msgstr "" +msgstr "항목이 제조 주문에 할당되어 있습니다" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" -msgstr "" +msgstr "재고 항목을 할당할 고객" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" -msgstr "" +msgstr "선택한 회사는 고객이 아닙니다" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" -msgstr "" +msgstr "재고 할당 메모" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" -msgstr "" +msgstr "재고 항목 목록을 제공해야 합니다" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" -msgstr "" +msgstr "재고 병합 메모" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" -msgstr "" +msgstr "공급업체 불일치 허용" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" -msgstr "" +msgstr "공급업체 부품이 다른 재고 항목의 병합을 허용합니다" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" -msgstr "" +msgstr "상태 불일치 허용" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" -msgstr "" +msgstr "상태 코드가 다른 재고 항목의 병합을 허용합니다" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" -msgstr "" +msgstr "최소 두 개의 재고 항목을 제공해야 합니다" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" -msgstr "" +msgstr "변경 없음" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" -msgstr "" +msgstr "재고 항목 기본 키 값" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" -msgstr "" +msgstr "재고 항목이 재고에 없습니다" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" -msgstr "" +msgstr "재고 항목이 이미 재고에 있습니다" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" -msgstr "" +msgstr "수량은 음수일 수 없습니다" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" -msgstr "" +msgstr "재고 거래 메모" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" -msgstr "" +msgstr "기존 재고로 병합" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" -msgstr "" +msgstr "가능하면 반품된 항목을 기존 재고 항목에 병합합니다" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" -msgstr "" +msgstr "다음 일련 번호" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" -msgstr "" +msgstr "이전 일련 번호" #: stock/status_codes.py:11 msgid "OK" -msgstr "" +msgstr "정상" #: stock/status_codes.py:12 msgid "Attention needed" -msgstr "" +msgstr "주의 필요" #: stock/status_codes.py:13 msgid "Damaged" -msgstr "" +msgstr "손상됨" #: stock/status_codes.py:14 msgid "Destroyed" -msgstr "" +msgstr "폐기됨" #: stock/status_codes.py:15 msgid "Rejected" -msgstr "" +msgstr "거부됨" #: stock/status_codes.py:19 msgid "Quarantined" -msgstr "" +msgstr "격리됨" #: stock/status_codes.py:44 msgid "Legacy stock tracking entry" -msgstr "" +msgstr "레거시 재고 추적 항목" #: stock/status_codes.py:46 msgid "Stock item created" -msgstr "" +msgstr "재고 항목 생성됨" #: stock/status_codes.py:49 msgid "Edited stock item" -msgstr "" +msgstr "재고 항목 수정됨" #: stock/status_codes.py:50 msgid "Assigned serial number" -msgstr "" +msgstr "일련 번호 할당됨" #: stock/status_codes.py:53 msgid "Stock counted" -msgstr "" +msgstr "재고 실사됨" #: stock/status_codes.py:54 msgid "Stock manually added" -msgstr "" +msgstr "재고 수동 추가됨" #: stock/status_codes.py:55 msgid "Stock manually removed" -msgstr "" +msgstr "재고 수동 제거됨" #: stock/status_codes.py:56 msgid "Serialized stock items" -msgstr "" +msgstr "재고 항목 일련번호화됨" #: stock/status_codes.py:58 msgid "Returned to stock" -msgstr "" +msgstr "재고로 반품됨" #: stock/status_codes.py:61 msgid "Location changed" -msgstr "" +msgstr "위치 변경됨" #: stock/status_codes.py:62 msgid "Stock updated" -msgstr "" +msgstr "재고 업데이트됨" #: stock/status_codes.py:65 msgid "Installed into assembly" -msgstr "" +msgstr "조립품에 설치됨" #: stock/status_codes.py:66 msgid "Removed from assembly" -msgstr "" +msgstr "조립품에서 제거됨" #: stock/status_codes.py:68 msgid "Installed component item" -msgstr "" +msgstr "구성품 항목 설치됨" #: stock/status_codes.py:69 msgid "Removed component item" -msgstr "" +msgstr "구성품 항목 제거됨" #: stock/status_codes.py:72 msgid "Split from parent item" -msgstr "" +msgstr "상위 항목에서 분리됨" #: stock/status_codes.py:73 msgid "Split child item" -msgstr "" +msgstr "하위 항목 분리됨" #: stock/status_codes.py:76 msgid "Merged stock items" -msgstr "" +msgstr "재고 항목 병합됨" #: stock/status_codes.py:79 msgid "Converted to variant" -msgstr "" +msgstr "변형(Variant)으로 변환됨" #: stock/status_codes.py:82 msgid "Build order output created" -msgstr "" +msgstr "제조 주문 출력 생성됨" #: stock/status_codes.py:83 msgid "Build order output completed" -msgstr "" +msgstr "제조 주문 출력 완료됨" #: stock/status_codes.py:84 msgid "Build order output rejected" -msgstr "" +msgstr "제조 주문 출력 거부됨" #: stock/status_codes.py:85 msgid "Consumed by build order" -msgstr "" +msgstr "제조 주문에서 소모됨" #: stock/status_codes.py:88 msgid "Shipped against Sales Order" -msgstr "" +msgstr "판매 주문으로 출하됨" #: stock/status_codes.py:91 msgid "Received against Purchase Order" -msgstr "" +msgstr "구매 주문으로 입고됨" #: stock/status_codes.py:94 msgid "Returned against Return Order" -msgstr "" +msgstr "반품 주문으로 반품됨" #: stock/status_codes.py:97 msgid "Sent to customer" -msgstr "" +msgstr "고객에게 발송됨" #: stock/status_codes.py:98 msgid "Returned from customer" -msgstr "" +msgstr "고객으로부터 반품됨" #: templates/403.html:6 templates/403.html:10 templates/403_csrf.html:7 msgid "Permission Denied" -msgstr "" +msgstr "권한이 없습니다" #: templates/403.html:11 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:12 msgid "You have been logged out from InvenTree." -msgstr "" +msgstr "InvenTree에서 로그아웃되었습니다." #: templates/404.html:6 templates/404.html:10 msgid "Page Not Found" -msgstr "" +msgstr "페이지를 찾을 수 없음" #: templates/404.html:11 msgid "The requested page does not exist" -msgstr "" +msgstr "요청한 페이지가 존재하지 않습니다" #: templates/500.html:6 templates/500.html:10 msgid "Internal Server Error" -msgstr "" +msgstr "내부 서버 오류" #: templates/500.html:11 #, python-format msgid "The %(inventree_title)s server raised an internal error" -msgstr "" +msgstr "%(inventree_title)s 서버에서 내부 오류가 발생했습니다" #: templates/500.html:12 msgid "Refer to the error log in the admin interface for further details" -msgstr "" +msgstr "자세한 내용은 관리자 인터페이스의 오류 로그를 확인하세요" #: templates/503.html:11 templates/503.html:15 msgid "Site is in Maintenance" -msgstr "" +msgstr "사이트 점검 중" #: templates/503.html:17 msgid "The site is currently in maintenance and should be up again soon!" -msgstr "" +msgstr "현재 사이트가 점검 중이며 곧 다시 이용할 수 있습니다!" #: templates/base.html:51 msgid "Server Restart Required" -msgstr "" +msgstr "서버 재시작 필요" #: templates/base.html:54 msgid "A configuration option has been changed which requires a server restart" -msgstr "" +msgstr "재시작이 필요한 설정 옵션이 변경되었습니다" #: templates/base.html:54 templates/base.html:64 msgid "Contact your system administrator for further information" -msgstr "" +msgstr "자세한 내용은 시스템 관리자에게 문의하세요" #: templates/base.html:61 msgid "Pending Database Migrations" -msgstr "" +msgstr "대기 중인 데이터베이스 마이그레이션" #: templates/base.html:64 msgid "There are pending database migrations which require attention" -msgstr "" +msgstr "주의가 필요한 대기 중인 데이터베이스 마이그레이션이 있습니다" #: templates/config_error.html:6 templates/config_error.html:10 msgid "Configuration Error" -msgstr "" +msgstr "구성 오류" #: templates/config_error.html:11 #, python-format msgid "The %(inventree_title)s server raised a configuration error" -msgstr "" +msgstr "%(inventree_title)s 서버에서 구성 오류가 발생했습니다" #: templates/email/build_order_completed.html:9 #: templates/email/canceled_order_assigned.html:9 @@ -9283,341 +9344,357 @@ 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 "" +msgstr "제조 주문 %(build)s - %(part)s %(quantity)s개 제조 중" #: 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 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 #: templates/email/part_event_notification.html:9 msgid "Click on the following link to view this part" -msgstr "" +msgstr "이 부품을 보려면 다음 링크를 클릭하세요" #: templates/email/low_stock_notification.html:18 #: templates/email/part_event_notification.html:19 msgid "Minimum Quantity" -msgstr "" +msgstr "최소 수량" #: templates/email/part_event_notification.html:32 msgid "You are receiving this email because you are subscribed to notifications for this part or a category that it is part of " -msgstr "" +msgstr "이 부품 또는 이 부품이 속한 카테고리에 대한 알림을 구독하고 있어 이 이메일을 받고 있습니다 " #: templates/email/stale_stock_notification.html:10 msgid "The following stock items are approaching their expiry dates:" -msgstr "" +msgstr "다음 재고 항목의 유효기간이 곧 만료됩니다:" #: templates/email/stale_stock_notification.html:23 msgid "Days Until Expiry" -msgstr "" +msgstr "만료까지 남은 일수" #: templates/email/stale_stock_notification.html:57 msgid "You are receiving this email because you are subscribed to notifications for these parts" -msgstr "" +msgstr "이 부품들에 대한 알림을 구독하고 있어 이 이메일을 받고 있습니다" #: users/admin.py:101 msgid "Users" -msgstr "" +msgstr "사용자" #: users/admin.py:102 msgid "Select which users are assigned to this group" -msgstr "" +msgstr "이 그룹에 할당할 사용자를 선택하세요" #: users/admin.py:137 msgid "Personal info" -msgstr "" +msgstr "개인 정보" #: users/admin.py:139 msgid "Permissions" -msgstr "" +msgstr "권한" #: users/admin.py:142 msgid "Important dates" -msgstr "" +msgstr "중요 날짜" #: users/authentication.py:30 users/models.py:151 msgid "Token has been revoked" -msgstr "" +msgstr "토큰이 취소되었습니다" #: users/authentication.py:33 msgid "Token has expired" -msgstr "" +msgstr "토큰이 만료되었습니다" #: users/models.py:94 msgid "API Token" -msgstr "" +msgstr "API 토큰" #: users/models.py:95 msgid "API Tokens" -msgstr "" +msgstr "API 토큰" #: users/models.py:131 msgid "Token Name" -msgstr "" +msgstr "토큰 이름" #: users/models.py:132 msgid "Custom token name" -msgstr "" +msgstr "사용자 지정 토큰 이름" #: users/models.py:138 msgid "Token expiry date" -msgstr "" +msgstr "토큰 만료일" #: users/models.py:146 msgid "Last Seen" -msgstr "" +msgstr "마지막 사용" #: users/models.py:147 msgid "Last time the token was used" -msgstr "" +msgstr "토큰이 마지막으로 사용된 시간" #: users/models.py:151 msgid "Revoked" -msgstr "" +msgstr "취소됨" #: users/models.py:229 msgid "Permission set" -msgstr "" +msgstr "권한 세트" #: users/models.py:242 msgid "View" -msgstr "" +msgstr "보기" #: users/models.py:242 msgid "Permission to view items" -msgstr "" +msgstr "항목을 볼 권한" #: users/models.py:246 msgid "Add" -msgstr "" +msgstr "추가" #: users/models.py:246 msgid "Permission to add items" -msgstr "" +msgstr "항목을 추가할 권한" #: users/models.py:250 msgid "Change" -msgstr "" +msgstr "변경" #: users/models.py:252 msgid "Permissions to edit items" -msgstr "" +msgstr "항목을 수정할 권한" #: users/models.py:256 msgid "Delete" -msgstr "" +msgstr "삭제" #: users/models.py:258 msgid "Permission to delete items" -msgstr "" +msgstr "항목을 삭제할 권한" #: users/models.py:495 msgid "Bot" -msgstr "" +msgstr "봇" #: users/models.py:496 msgid "Internal" -msgstr "" +msgstr "내부" #: users/models.py:498 msgid "Guest" -msgstr "" +msgstr "게스트" #: users/models.py:507 msgid "Language" -msgstr "" +msgstr "언어" #: users/models.py:508 msgid "Preferred language for the user" -msgstr "" +msgstr "사용자의 선호 언어" #: users/models.py:513 msgid "Theme" -msgstr "" +msgstr "테마" #: users/models.py:514 msgid "Settings for the web UI as JSON - do not edit manually!" -msgstr "" +msgstr "웹 UI 설정(JSON) - 수동으로 편집하지 마세요!" #: users/models.py:519 msgid "Widgets" -msgstr "" +msgstr "위젯" #: users/models.py:521 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" -msgstr "" +msgstr "대시보드 위젯 설정(JSON) - 수동으로 편집하지 마세요!" #: users/models.py:528 msgid "Display Name" -msgstr "" +msgstr "표시 이름" #: users/models.py:529 msgid "Chosen display name for the user" -msgstr "" +msgstr "사용자가 선택한 표시 이름" #: users/models.py:535 msgid "Position" -msgstr "" +msgstr "직책" #: users/models.py:536 msgid "Main job title or position" -msgstr "" +msgstr "주요 직함 또는 직책" #: users/models.py:543 msgid "User status message" -msgstr "" +msgstr "사용자 상태 메시지" #: users/models.py:550 msgid "User location information" -msgstr "" +msgstr "사용자 위치 정보" #: users/models.py:555 msgid "User is actively using the system" -msgstr "" +msgstr "사용자가 시스템을 사용 중입니다" #: users/models.py:562 msgid "Preferred contact information for the user" -msgstr "" +msgstr "사용자가 선호하는 연락처 정보" #: users/models.py:568 msgid "User Type" -msgstr "" +msgstr "사용자 유형" #: users/models.py:569 msgid "Which type of user is this?" -msgstr "" +msgstr "어떤 유형의 사용자입니까?" #: users/models.py:575 msgid "Organisation" -msgstr "" +msgstr "조직" #: users/models.py:576 msgid "Users primary organisation/affiliation" -msgstr "" +msgstr "사용자의 기본 조직/소속" #: users/models.py:584 msgid "Primary Group" -msgstr "" +msgstr "기본 그룹" #: users/models.py:585 msgid "Primary group for the user" -msgstr "" +msgstr "사용자의 기본 그룹" #: users/ruleset.py:26 msgid "Admin" -msgstr "" +msgstr "관리자" #: users/ruleset.py:32 msgid "Purchase Orders" -msgstr "" +msgstr "구매 주문" #: users/ruleset.py:33 msgid "Sales Orders" -msgstr "" +msgstr "판매 주문" #: users/ruleset.py:34 msgid "Return Orders" -msgstr "" +msgstr "반품 주문" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" -msgstr "" +msgstr "사용자 이름" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" -msgstr "" +msgstr "이름" + +#: users/serializers.py:189 +msgid "First name of the user" +msgstr "사용자의 이름" #: users/serializers.py:193 -msgid "First name of the user" -msgstr "" - -#: users/serializers.py:197 msgid "Last Name" -msgstr "" +msgstr "성" + +#: users/serializers.py:193 +msgid "Last name of the user" +msgstr "사용자의 성" #: users/serializers.py:197 -msgid "Last name of the user" -msgstr "" - -#: users/serializers.py:201 msgid "Email address of the user" -msgstr "" +msgstr "사용자의 이메일 주소" -#: users/serializers.py:309 -msgid "Staff" -msgstr "" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "사용자가 인증되어야 합니다" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "슈퍼유저만 다른 사용자의 토큰을 만들 수 있습니다" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "관리자" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "이 사용자에게 관리자 권한이 있습니까" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" -msgstr "" +msgstr "슈퍼유저" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" -msgstr "" +msgstr "이 사용자는 슈퍼유저입니까" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" -msgstr "" +msgstr "이 사용자 계정이 활성 상태입니까" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" -msgstr "" +msgstr "슈퍼유저만 이 필드를 조정할 수 있습니다" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" -msgstr "" +msgstr "비밀번호" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" -msgstr "" +msgstr "사용자의 비밀번호" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" -msgstr "" +msgstr "경고 무시" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" -msgstr "" +msgstr "비밀번호 규칙에 대한 경고를 무시합니다" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "스태프" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "이 사용자에게 스태프 권한이 있습니까" + +#: users/serializers.py:468 msgid "You do not have permission to create users" -msgstr "" +msgstr "사용자를 생성할 권한이 없습니다" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." -msgstr "" +msgstr "계정이 생성되었습니다." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" -msgstr "" +msgstr "로그인하려면 비밀번호 재설정 기능을 사용하세요" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" -msgstr "" +msgstr "InvenTree에 오신 것을 환영합니다" diff --git a/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po index 94fb1d6bf9..1748d98d6d 100644 --- a/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Lithuanian\n" "Language: lt_LT\n" @@ -49,7 +49,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Vartotojas neturi teisių peržiūrėti šio modelio" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Nepavyko konvertuoti {original} į {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Pateiktas neteisingas kiekis" @@ -104,13 +104,13 @@ msgstr "Įveskite datą" msgid "Invalid decimal value" msgstr "Neteisinga dešimtainė reikšmė" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Pastabos" @@ -123,75 +123,91 @@ msgstr "Reikšmė „{name}“ neatitinka šablono formato" msgid "Provided value does not match required pattern: " msgstr "Pateikta reikšmė neatitinka reikalaujamo šablono: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Negalima iš karto susieti daugiau nei 1000 elementų" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Nepateiktas serijos numeris" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Pasikartojantis serijinis numeris" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Neteisinga grupė: {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Grupės {group} kiekis viršija leistiną kiekį ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Serijos numerių nerasta" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Pašalinkite HTML žymes iš šios reikšmės" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "Duomenyse yra draudžiamo „markdown“ turinio" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Ryšio klaida" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Serveris grąžino netinkamą būsenos kodą" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Įvyko išimtis" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Serveris grąžino neteisingą „Content-Length“ reikšmę" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Paveikslėlio dydis per didelis" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Paveikslėlio atsisiuntimas viršijo maksimalų leistiną dydį" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Nutolęs serveris grąžino tuščią atsakymą" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Nurodytas URL nėra tinkamas paveikslėlio failas" @@ -199,7 +215,7 @@ msgstr "Nurodytas URL nėra tinkamas paveikslėlio failas" msgid "Log in to the app" msgstr "Prisijungti prie programos" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "El. paštas" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Neteisingas pasirinkimas" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Pavadinimas" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Aprašymas" msgid "Description (optional)" msgstr "Aprašymas (neprivalomas)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Kelias" @@ -320,51 +336,51 @@ msgstr "Serveris užfiksavo klaidą." msgid "Image" msgstr "Paveikslėlis" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Turi būti teisingas skaičius" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valiuta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Pasirinkite valiutą iš galimų variantų" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Neteisinga reikšmė" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Nutolęs paveikslėlis" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "Nutolusio paveikslėlio failo URL" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Paveikslėlių atsisiuntimas iš nutolusio URL neįjungtas" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Nepavyko atsisiųsti paveikslėlio iš nutolusio URL" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "Kinų (supaprastinta)" msgid "Chinese (Traditional)" msgstr "Kinų (tradicinė)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "Neteisingas fizinis vienetas" msgid "Not a valid currency code" msgstr "Netinkamas valiutos kodas" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Užsakymo būsena" @@ -545,21 +561,21 @@ msgstr "Užsakymo būsena" msgid "Parent Build" msgstr "Pirminė gamyba" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Įtraukti variantus" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "Įtraukti variantus" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "Įtraukti variantus" msgid "Part" msgstr "Detalė" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategorija" @@ -653,16 +669,16 @@ msgstr "Neįtraukti medžio struktūros" msgid "Build must be cancelled before it can be deleted" msgstr "Prieš ištrinant gamybą, ji turi būti atšaukta" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Sunaudojama" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Pasirinktinai" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Surinkimas" @@ -671,32 +687,32 @@ msgstr "Surinkimas" msgid "Tracked" msgstr "Sekama" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testuojama" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Liko neįvykdytų užsakymų" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Priskirta" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Prieinama" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Užsakyta" @@ -704,26 +720,26 @@ msgstr "Užsakyta" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Gamybos užsakymas" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Vieta" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "Tikslinė data turi būti po pradžios datos" msgid "Build Order Reference" msgstr "Gamybos užsakymo nuoroda" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Pardavimo užsakymo nuoroda" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Šaltinio vieta" @@ -845,16 +861,16 @@ msgstr "Gamybos būsena" msgid "Build status code" msgstr "Gamybos būsenos kodas" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Partijos kodas" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Šios gamybos partijos kodas" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Sukūrimo data" @@ -875,7 +891,7 @@ msgstr "Tikslinė užbaigimo data" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Planuojama gamybos pabaigos data. Po šios datos gamyba bus pavėluota." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Užbaigimo data" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Šio gamybos užsakymo prioritetas" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Projekto kodas" @@ -948,7 +964,7 @@ msgstr "Gamybos užsakymas {build} užbaigtas" msgid "A build order has been completed" msgstr "Gamybos užsakymas užbaigtas" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Sekamoms detalėms būtina nurodyti serijos numerius" @@ -964,23 +980,23 @@ msgstr "Gamybos rezultatas jau užbaigtas" msgid "Build output does not match Build Order" msgstr "Gamybos rezultatas neatitinka gamybos užsakymo" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Kiekis turi būti didesnis nei nulis" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Kiekis negali viršyti rezultato kiekio" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Gamybos rezultatas {serial} nepraėjo visų privalomų testų" @@ -1001,10 +1017,10 @@ msgstr "Gamybos užsakymo eilutės įrašas" msgid "Build object" msgstr "Gamybos objektas" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Gamybos objektas" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "Atsargoms su serijos numeriais kiekis turi būti 1" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Priskirtas kiekis ({q}) negali viršyti galimo atsargų kiekio ({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "Atsargų elementas per daug paskirstytas" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Atsargų elementas" @@ -1083,378 +1099,378 @@ msgstr "Paskirties atsargų elementas" msgid "Build Level" msgstr "Gamybos lygis" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Detalės pavadinimas" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Gamybos rezultatas" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Gamybos rezultatas neatitinka pirminės gamybos" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Rezultato detalė neatitinka gamybos užsakymo detalės" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Šis gamybos rezultatas jau užbaigtas" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Šis gamybos rezultatas nėra visiškai paskirstytas" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Įveskite kiekį gamybos rezultatui" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Sekamoms detalėms reikalingas sveikasis kiekis" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Reikalingas sveikasis kiekis, nes komplektavimo žiniaraštyje yra sekamų detalių" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serijos numeriai" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Įveskite serijos numerius gamybos rezultatams" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Atsargų vieta gamybos rezultatams" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Automatiškai priskirti serijos numerius" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatiškai priskirti reikalingas prekes su atitinkančiais serijos numeriais" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Šie serijos numeriai jau egzistuoja arba yra neteisingi" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Turi būti pateiktas gamybos rezultatų sąrašas" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Atsargų vieta brokuotiems rezultatams" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Atmesti priskyrimus" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Atmesti visus atsargų priskyrimus brokuotiems rezultatams" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Priežastis, dėl kurios gamybos rezultatas(-ai) buvo nurašytas(-i)" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Vieta, kur laikomi užbaigti gamybos rezultatai" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Priimti nepilną priskyrimą" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Užbaigti rezultatus, net jei atsargos dar nėra pilnai priskirtos" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Sunaudoti priskirtas atsargas" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Sunaudoti bet kokias šiai gamybai jau priskirtas atsargas" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Pašalinti nebaigtus rezultatus" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Ištrinti visus nebaigtus gamybos rezultatus" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Neleidžiama" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Priimti kaip sunaudotą šio gamybos užsakymo metu" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Panaikinkite priskyrimus prieš užbaigiant šį gamybos užsakymą" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Per daug paskirstytos atsargos" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Kaip norite elgtis su papildomai šiam gamybos užsakymui priskirtomis atsargomis" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Kai kurios atsargos paskirstytos per daug" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Priimti nepriskirtą" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Priimti, kad atsargos nebuvo visiškai priskirtos šiam gamybos užsakymui" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Reikalingos atsargos nėra visiškai priskirtos" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Priimti nepilną" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Priimti, kad ne visi reikalingi gamybos rezultatai buvo užbaigti" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Reikalingas gamybos kiekis nebuvo užbaigtas" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "Gamybos užsakymas turi nebaigtų antrinių gamybų" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Gamybos užsakymas turi būti gamybos būsenoje" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Gamybos užsakymas turi nebaigtų rezultatų" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Gamybos eilutė" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Gamybos rezultatas" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Gamybos rezultatas turi būti susietas su ta pačia gamyba" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Gamybos eilutės įrašas" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part turi būti ta pati detalė kaip ir gamybos užsakyme" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Prekė turi būti atsargose" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Viršytas prieinamas kiekis ({q})" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Sekamų detalių priskyrymui turi būti nurodytas gamybos rezultatas" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Negalima nurodyti gamybos rezultato nesekamoms detalėms" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Turi būti pateikti paskirstymo elementai" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Atsargų vieta, iš kurios bus imamos detalės (palikite tuščią, jei tinka bet kuri vieta)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Neįtraukti vietos" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Neįtraukti atsargų iš šios pasirinktos vietos" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Keičiamos atsargos" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Atsargos iš skirtingų vietų gali būti naudojamos pakaitomis" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Pakaitinės atsargos" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Leisti priskirti pakaitines detales" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Pasirenkami elementai" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Priskirti papildomus BOM elementus gamybos užsakymui" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "BOM nuoroda" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "BOM detalės ID" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "BOM detalės pavadinimas" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Gamyba" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Tiekėjo detalė" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Priskirtas kiekis" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Gamybos nuoroda" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Detalės kategorijos pavadinimas" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Sekama" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Paveldėta" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Leisti variantus" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "BOM elementas" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "Gamyboje" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Išorinės atsargos" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Prieinamos atsargos" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Prieinamos pakaitinės atsargos" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Prieinamos variantų atsargos" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "Sulaikyta" msgid "Cancelled" msgstr "Atšaukta" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "Vėluojantis gamybos užsakymas" msgid "Build order {bo} is now overdue" msgstr "Gamybos užsakymas {bo} dabar vėluoja" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "Yra nuoroda" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "Yra failas" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "Vartotojas neturi teisės ištrinti šių priedų" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Vartotojas neturi teisės ištrinti šio priedo" @@ -1534,11 +1550,11 @@ msgstr "Nepateikta jokių galiojančių valiutos kodų" msgid "No plugin" msgstr "Nėra papildinio" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Projekto kodo etiketė" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Atnaujinta" @@ -1600,7 +1616,7 @@ msgstr "Raktas turi būti unikalus" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Vartotojas" msgid "Price break quantity" msgstr "Kiekio ribinis taškas kainai" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Kaina" @@ -1633,10 +1649,10 @@ msgstr "Galutinis taškas, kuriuo priimamas šis webhook'as" msgid "Name for this webhook" msgstr "Šio webhook'o pavadinimas" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktyvus" @@ -1660,11 +1676,11 @@ msgstr "Slaptas raktas" msgid "Shared secret for HMAC" msgstr "Bendras slaptas HMAC raktas" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "Pranešimo ID" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "Unikalus pranešimo identifikatorius" @@ -1714,7 +1730,7 @@ msgstr "Pavadinimas" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Autorius" msgid "Summary" msgstr "Santrauka" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Perskaityta" @@ -1797,7 +1813,7 @@ msgstr "Trūksta failo" msgid "Missing external link" msgstr "Trūksta išorinės nuorodos" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "Modelio tipas" @@ -1833,7 +1849,7 @@ msgstr "Failo dydis" msgid "File size in bytes" msgstr "Failo dydis baitais" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Netinkamas modelio tipas priedui" @@ -1861,7 +1877,7 @@ msgstr "Loginis raktas" msgid "State logical key that is equal to this custom state in business logic" msgstr "Loginis būsenos raktas, atitinkantis šią pasirinkitinę būseną" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Reikšmė" @@ -1874,7 +1890,7 @@ msgstr "Skaitinė reikšmė, saugoma modelio duomenų bazėje" msgid "Name of the state" msgstr "Būsenos pavadinimas" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Etiketė" @@ -1930,7 +1946,7 @@ msgstr "Loginis raktas turi būti tarp nuorodos būsenų loginių raktų" msgid "Name must be different from the names of the reference status" msgstr "Pavadinimas turi skirtis nuo nuorodos būsenų pavadinimų" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "Pasirinkimų sąrašas" @@ -1982,7 +1998,7 @@ msgstr "Numatytasis įrašas" msgid "Default entry for this selection list" msgstr "Numatytasis šio pasirinkimų sąrašo įrašas" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Sukurta" @@ -1998,334 +2014,334 @@ msgstr "Paskutinį kartą atnaujinta" msgid "Date and time that the selection list was last updated" msgstr "Data ir laikas, kada paskutinį kartą buvo atnaujintas sąrašas" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "Pasirinkimų sąrašo įrašas" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "Pasirinkimų sąrašo įrašai" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "Pasirinkimų sąrašas, kuriam priklauso šis įrašas" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "Pasirinkimų sąrašo įrašo reikšmė" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "Pasirinkimų įrašo etiketė" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "Pasirinkimų įrašo aprašymas" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "Ar šis sąrašo įrašas aktyvus?" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "Parametro šablonas" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "Žymimojo laukelio parametrai negali turėti matavimo vienetų" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "Žymimojo laukelio parametrai negali turėti pasirinkimų" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "Pasirinkimai turi būti unikalūs" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "Parametro šablono pavadinimas turi būti unikalus" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "Parametro pavadinimas" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "Vienetai" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "Fiziniai šio parametro vienetai" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "Parametro aprašymas" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "Žymimasis laukelis" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "Ar šis parametras yra žymimasis laukelis?" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "Pasirinkimai" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "Galimi pasirinkimai šiam parametrui (atskirti kableliais)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "Pasirinkimų sąrašas šiam parametrui" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Įjungta" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "Neteisingas pasirinkimas parametro reikšmei" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Šablonas" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Data" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "Parametro reikšmė" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Pastaba" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Neprivalomas pastabų laukas" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "Brūkšninio kodo nuskaitymas" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "Brūkšninio kodo duomenys" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "Vartotojas, nuskaitęs brūkšninį kodą" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "Laiko žymė" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "Brūkšninio kodo nuskaitymo data ir laikas" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "URL galutinis taškas, kuris apdorojo brūkšninį kodą" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "Kontekstas" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "Konteksto duomenys brūkšninio kodo nuskaitymui" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "Atsakas" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "Atsako duomenys iš brūkšninio kodo nuskaitymo" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Rezultatas" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "Ar brūkšninio kodo nuskaitymas buvo sėkmingas?" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Raktas" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "Nurodo, ar nustatymą pakeičia aplinkos kintamasis" msgid "Override" msgstr "Nepaisyti" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Vykdoma" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Laukiančios užduotys" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Suplanuotos užduotys" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Nepavykusios užduotys" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Užduoties ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Unikalus užduoties ID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Užraktas" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Užrakto laikas" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Užduoties pavadinimas" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funkcija" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Funkcijos pavadinimas" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumentai" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Užduoties argumentai" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Rakto argumentai" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Užduoties rakto argumentai" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Failo pavadinimas" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Modelio tipas" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Vartotojas neturi leidimo kurti ar redaguoti šio modelio priedų" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Pasirinkimų sąrašas yra užrakintas" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Nėra grupės" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "Svetainės URL yra užrakintas konfigūracijoje" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Reikalingas paleidimas iš naujo" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Nustatymas buvo pakeistas ir reikia paleisti serverį iš naujo" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Laukiančios migracijos" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Laukiančių duomenų bazės migracijų skaičius" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "Egzemplioriaus ID" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Unikalus identifikatorius šiam InvenTree egzemplioriui" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "Pranešimo ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Skelbti serverio egzemplioriaus ID serverio būsenos informacijoje (neprisijungus)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Serverio egzemplioriaus pavadinimas" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Serverio egzemplioriaus pavadinimas kaip eilutė" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Naudoti egzemplioriaus pavadinimą" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Naudoti egzemplioriaus pavadinimą antraštės juostoje" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Apriboti `apie` rodymą" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "`Apie` langą rodyti tik super-vartotojams" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Įmonės pavadinimas" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "Vidinis įmonės pavadinimas" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "Pagrindinis URL" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "Pagrindinis URL šiam serverio egzemplioriui" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Numatytoji valiuta" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "Pasirinkti pagrindinę valiutą kainų skaičiavimui" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "Palaikomos valiutos" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "Palaikomų valiutų kodų sąrašas" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "Valiutų atnaujinimo intervalas" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Kaip dažnai atnaujinti valiutų kursus (nulis – išjungti)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "dienos" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "Valiutų atnaujinimo papildinys" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "Naudotinas valiutų atnaujinimo papildinys" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "Atsisiųsti iš URL" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "Leisti atsisiųsti išorinius paveikslėlius ir failus iš nuorodų" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "Atsisiuntimo dydžio riba" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "Didžiausias leistinas atsisiunčiamo paveikslėlio dydis" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "Naudojamas user-agent atsisiuntimui iš URL" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Leisti pakeisti user-agent, naudojamą atsisiunčiant paveikslėlius ir failus iš išorinio URL (palikite tuščią, jei naudoti numatytąjį)" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "Griežtas URL tikrinimas" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "Reikalauti schemos nurodymo tikrinant URL" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "Atnaujinimų tikrinimo intervalas" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "Kaip dažnai tikrinti atnaujinimus (nulis – išjungti)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Automatinė atsarginė kopija" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "Įjungti automatinį duomenų bazės ir failų atsarginį kopijavimą" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "Automatinio atsarginės kopijos kūrimo intervalas" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "Nurodykite dienų skaičių tarp atsarginių kopijų kūrimo" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "Užduočių ištrynimo intervalas" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "Foninių užduočių rezultatai bus ištrinti po nurodyto dienų skaičiaus" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "Klaidų žurnalo ištrynimo intervalas" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "Klaidų žurnalai bus ištrinti po nurodyto dienų skaičiaus" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "Pranešimų ištrynimo intervalas" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "Vartotojų pranešimai bus ištrinti po nurodyto dienų skaičiaus" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Brūkšninių kodų palaikymas" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "Įjungti brūkšninių kodų skaitytuvo palaikymą žiniatinklio sąsajoje" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "Išsaugoti brūkšninių kodų nuskaitymus" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "Brūkšninių kodų nuskaitymo rezultatus išsaugoti duomenų bazėje" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "Maksimalus nuskaitymų skaičius" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "Maksimalus saugomų brūkšninių kodų nuskaitymų skaičius" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "Brūkšninio kodo įvesties delsimas" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "Brūkšninio kodo įvesties apdorojimo delsos laikas" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "Brūkšninių kodų palaikymas per kamerą" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "Leisti brūkšninių kodų nuskaitymą per naršyklės kamerą" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "Rodyti brūkšninio kodo duomenis" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "Rodyti brūkšninio kodo duomenis naršyklėje kaip tekstą" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "Brūkšninio kodo generavimo papildinys" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "Papildinys vidiniam brūkšninių kodų generavimui" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "Detalių versijos" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "Įjungti versijos lauką detalėms" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "Tik surinkimo versijoms" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "Leisti versijas tik surenkamoms detalėms" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "Leisti pašalinti iš surinkimo" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "Leisti ištrinti detales, kurios yra naudojamos surinkimuose" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "IPN reguliarioji išraiška" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "Reguliariosios išraiškos šablonas detalių IPN tikrinimui" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "Leisti pasikartojančius IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "Leisti kelioms detalėms turėti tą patį IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "Leisti redaguoti IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "Leisti keisti IPN reikšmę redaguojant detalę" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "Kopijuoti detalės BOM duomenis" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopijuoti BOM duomenis pagal nutylėjimą dubliuojant detalę" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "Kopijuoti detalės parametrus" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "Kopijuoti parametrų duomenis pagal nutylėjimą dubliuojant detalę" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "Kopijuoti detalės testavimo duomenis" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "Kopijuoti testavimo duomenis pagal nutylėjimą dubliuojant detalę" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "Kopijuoti kategorijų parametrų šablonus" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "Kopijuoti kategorijų parametrų šablonus kuriant detalę" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "Detalės pagal nutylėjimą yra šablonai" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "Detalės pagal nutylėjimą gali būti surenkamos iš kitų komponentų" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponentas" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "Detalės pagal nutylėjimą gali būti naudojamos kaip sub-komponentai" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Galima įsigyti" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "Detalės pagal nutylėjimą gali būti įsigyjamos" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Parduodama" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "Detalės pagal nutylėjimą gali būti parduodamos" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "Detalės pagal nutylėjimą gali būti sekamos" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Virtuali" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "Detalės pagal nutylėjimą yra virtualios" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "Rodyti susijusias detales" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "Rodyti susijusias detales pasirinktai detalei" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "Pradiniai atsargų duomenys" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "Leisti sukurti pradinę atsargą pridedant naują detalę" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "Pradiniai tiekėjo duomenys" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Leisti sukurti pradinius tiekėjo duomenis pridedant naują detalę" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "Detalės pavadinimo rodymo formatas" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "Detalės pavadinimo rodymo formatas" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "Detalės kategorijos numatytoji piktograma" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "Detalės kategorijos numatytoji piktograma (tuščia reiškia, kad nenaudojama)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "Mažiausias kainos dešimtainių skaičių kiekis" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Minimalus dešimtainių skaitmenų skaičius rodomas kainodaros duomenyse" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "Didžiausias kainos dešimtainių skaičių kiekis" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Didžiausias dešimtainių skaitmenų skaičius rodomas kainodaros duomenyse" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "Naudoti tiekėjo kainas" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Įtraukti tiekėjų kainų lygius į bendrą kainodaros skaičiavimą" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "Pirkimų istorija keičia kainas" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Istorinės pirkimo kainos pakeičia tiekėjo kainų lygius" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "Naudoti atsargų kainas" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Naudoti kainas iš rankiniu būdu įvestų atsargų duomenų kainodaros skaičiavimui" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "Atsargų kainų galiojimo trukmė" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Pašalinti senesnes nei nurodytas dienų skaičius atsargas iš kainodaros skaičiavimų" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "Naudoti variantų kainas" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "Įtraukti variantų kainas į bendrą kainodaros skaičiavimą" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "Tik aktyvūs variantai" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "Naudoti tik aktyvius detalių variantus kainodarai" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "Kainodaros atnaujinimo intervalas" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "Dienų skaičius iki automatinio detalių kainų atnaujinimo" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Vidinės kainos" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "Įjungti vidines kainas detalėms" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "Vidinės kainos viršenybė" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "Jei yra, vidinės kainos pakeičia bendrus kainodaros skaičiavimus" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "Įjungti etikečių spausdinimą" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "Įjungti etikečių spausdinimą iš žiniatinklio sąsajos" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "Etiketės vaizdo DPI" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI raiška generuojant vaizdus etikečių spausdinimo papildiniams" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Įjungti ataskaitas" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "Įjungti ataskaitų generavimą" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "Derinimo režimas" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "Generuoti ataskaitas derinimo režimu (HTML išvestis)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "Registruoti ataskaitų klaidas" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "Registruoti klaidas, įvykusias generuojant ataskaitas" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Puslapio dydis" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "Numatytasis PDF ataskaitų puslapio dydis" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "Reikalauti parametrų vienetų" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "Jei nurodyti vienetai, parametro reikšmės turi atitikti nurodytus vienetus" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "Globaliai unikalūs serijiniai numeriai" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "Atsargų serijos numeriai turi būti globaliai unikalūs" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "Ištrinti išnaudotas atsargas" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "Nustato numatytą elgseną, kai atsargos yra išnaudotos" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "Partijos kodo šablonas" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "Šablonas numatytiesiems atsargų partijos kodams generuoti" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "Atsargų galiojimas" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "Įjungti atsargų galiojimo funkcionalumą" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "Parduoti pasibaigusias galioti atsargas" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "Leisti parduoti pasibaigusias galioti atsargas" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "Atsargų senėjimo laikas" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "Dienų skaičius, po kurio atsargos laikomos pasenusiomis iki jų galiojimo pabaigos" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "Naudoti pasibaigusias galioti atsargas gamyboje" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "Leisti naudoti pasibaigusias galioti atsargas gamyboje" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "Atsargų nuosavybės kontrolė" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "Įjungti atsargų vietų ir vienetų nuosavybės kontrolę" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "Atsargų vietos numatytoji piktograma" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "Atsargų vietos numatytoji piktograma (tuščia reiškia nenaudojama)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "Rodyti sumontuotas atsargas" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "Rodyti sumontuotas atsargas atsargų lentelėse" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "Tikrinti BOM montuojant atsargas" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Sumontuotos atsargos turi būti pirminio gaminio BOM" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "Leisti perkelti neturimas atsargas" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Leisti perkelti atsargas tarp vietų net jei jų nėra atsargose" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "Gamybos užsakymo nuorodos šablonas" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "Privalomas šablonas gamybos užsakymo nuorodos laukui generuoti" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "Reikalauti atsakingo savininko" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "Kiekvienam užsakymui turi būti priskirtas atsakingas savininkas" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "Reikalauti aktyvios detalės" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "Neleidžia kurti gamybos užsakymų neaktyvioms detalėms" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "Reikalauti užrakintos detalės" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "Neleidžia kurti gamybos užsakymų neužrakintoms detalėms" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "Reikalauti galiojančio komplektavimo sąrašo (BOM)" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "Neleidžia kurti gamybos užsakymų, kol BOM nėra patvirtintas" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "Reikalauti uždarytų antrinių užsakymų" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "Neleidžia užbaigti gamybos užsakymo, kol visi antriniai užsakymai neuždaryti" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Blokuoti, kol testai bus išlaikyti" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Neleidžia užbaigti gaminių, kol visi privalomi testai nėra išlaikyti" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "Įjungti grąžinimo užsakymus" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "Įjungia grąžinimo užsakymų funkciją vartotojo sąsajoje" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "Grąžinimo užsakymo nuorodos šablonas" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "Būtinas šablonas grąžinimo užsakymo nuorodos laukui generuoti" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "Redaguoti užbaigtus grąžinimo užsakymus" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "Leisti redaguoti grąžinimo užsakymus po jų užbaigimo" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "Pardavimo užsakymo nuorodos šablonas" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "Būtinas šablonas pardavimo užsakymo nuorodos laukui generuoti" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "Numatytasis siuntinys pardavimo užsakymui" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "Leisti automatiškai sukurti siuntinį kartu su pardavimo užsakymu" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "Redaguoti užbaigtus pardavimo užsakymus" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Leisti redaguoti pardavimo užsakymus po jų išsiuntimo arba užbaigimo" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "Pažymėti išsiųstus užsakymus kaip užbaigtus" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Pardavimo užsakymai, pažymėti kaip išsiųsti, bus automatiškai užbaigti, praleidžiant būseną „išsiųsta“" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "Pirkimo užsakymo nuorodos šablonas" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "Būtinas šablonas pirkimo užsakymo nuorodos laukui generuoti" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "Redaguoti užbaigtus pirkimo užsakymus" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Leisti redaguoti pirkimo užsakymus po jų išsiuntimo arba užbaigimo" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "Konvertuoti valiutą" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "Konvertuoti prekių vertę į pagrindinę valiutą priimant prekes" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "Automatiškai užbaigti pirkimo užsakymus" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Automatiškai pažymėti pirkimo užsakymus kaip užbaigtus, kai visos eilutės yra gautos" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Įjungti pamiršto slaptažodžio funkciją" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "Leisti naudoti pamiršto slaptažodžio funkciją prisijungimo puslapyje" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Įjungti registraciją" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "Leisti vartotojams savarankiškai registruotis prisijungimo puslapyje" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "Įjungti vieningą prisijungimą (SSO)" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "Įjungti vieningą prisijungimą (SSO) prisijungimo puslapyje" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "Įjungti registraciją per SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Leisti vartotojams registruotis per SSO prisijungimo puslapyje" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "Įjungti SSO grupių sinchronizavimą" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Įjungti InvenTree grupių sinchronizavimą su tapatybės tiekėjo (IdP) grupėmis" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "SSO grupės raktas" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Grupių atributo pavadinimas, kurį pateikia tapatybės tiekėjas (IdP)" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "SSO grupių susiejimas" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "SSO grupių susiejimas su vietinėmis InvenTree grupėmis. Jei vietinė grupė neegzistuoja, ji bus sukurta." -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "Pašalinti grupes, nepriklausančias SSO" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Ar pašalinti vartotojui priskirtas grupes, jei jos nėra pateikiamos per IdP. Išjungus gali kilti saugumo problemų" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "El. paštas privalomas" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "Reikalauti vartotojo el. pašto registracijos metu" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "Automatiškai užpildyti SSO naudotojų duomenis" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "Automatiškai užpildyti vartotojo informaciją pagal SSO paskyros duomenis" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "Įvesti el. paštą du kartus" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "Registracijos metu prašyti vartotojų du kartus įvesti el. paštą" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Įvesti slaptažodį du kartus" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "Registracijos metu prašyti vartotojų du kartus įvesti slaptažodį" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "Leidžiami domenai" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Riboti registraciją tik tam tikriems domenams (atskiriama kableliais, prasideda @)" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "Grupė registruojantis" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Grupė, į kurią priskiriami nauji vartotojai registracijos metu. Jei įjungta SSO grupių sinchronizacija, ši grupė nustatoma tik tuo atveju, jei grupė negaunama iš IdP." -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "Reikalauti kelių veiksnių autentifikacijos (MFA)" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "Vartotojai privalo naudoti kelių veiksnių apsaugą." -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "Tikrinti įskiepius paleidimo metu" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Tikrina, ar visi įskiepiai įdiegti paleidžiant – naudoti konteinerių aplinkose" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "Tikrinti įskiepių atnaujinimus" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "Įjungti periodinius įdiegtų įskiepių atnaujinimų tikrinimus" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "Įjungti URL integravimą" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "Leisti įskiepiams pridėti URL maršrutus" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "Įjungti navigacijos integraciją" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "Leisti įskiepiams integruotis į navigaciją" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "Įjungti programų integraciją" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "Leisti įskiepiams pridėti programas" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "Įjungti planavimo integraciją" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "Leisti įskiepiams vykdyti suplanuotas užduotis" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "Įjungti įvykių integraciją" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "Leisti įskiepiams reaguoti į vidinius įvykius" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "Įjungti sąsajos integraciją" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "Leisti įskiepiams integruotis į vartotojo sąsają" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "Įjungti projektų kodus" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "Įjungti projektų kodų naudojimą projektų sekimui" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "Neįtraukti išorinių vietų" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "Automatinės inventorizacijos periodas" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "Rodyti pilnus vartotojų vardus" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "Rodyti pilnus vardus vietoj vartotojo vardų" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "Rodyti vartotojų profilius" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "Rodyti vartotojų profilius jų paskyros puslapyje" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "Įjungti bandymų stoties duomenis" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "Įjungti bandymų stoties duomenų rinkimą testų rezultatams" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "Detalė yra aktyvi" msgid "Manufacturer is Active" msgstr "Gamintojas yra aktyvus" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Tiekėjo detalė yra aktyvi" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Vidinė detalė yra aktyvi" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Tiekėjas yra aktyvus" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Gamintojas" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Įmonė" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "Turi atsargų" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Adresas" @@ -4163,7 +4195,7 @@ msgstr "Siuntimo pastabos vidiniam naudojimui" msgid "Link to address information (external)" msgstr "Nuoroda į adreso informaciją (išorinė)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Gamintojo detalė" @@ -4181,12 +4213,12 @@ msgstr "Pasirinkite detalę" msgid "Select manufacturer" msgstr "Pasirinkite gamintoją" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "MPN" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Gamintojo detalės numeris (MPN)" @@ -4210,8 +4242,8 @@ msgstr "Pakuotės vienetų kiekis turi būti didesnis už nulį" msgid "Linked manufacturer part must reference the same base part" msgstr "Susieta gamintojo detalė turi nurodyti tą pačią pagrindinę detalę" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Tiekėjas" msgid "Select supplier" msgstr "Pasirinkite tiekėją" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Tiekėjo sandėlio numeris (SKU)" @@ -4258,8 +4290,8 @@ msgstr "bazinė kaina" msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimalus mokestis (pvz., sandėliavimo mokestis)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Pakuotė" @@ -4307,14 +4339,18 @@ msgstr "Numatytoji valiuta, naudojama šiam tiekėjui" msgid "Company Name" msgstr "Įmonės pavadinimas" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Sandėlyje" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Įvyko klaida eksportuojant duomenis" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "Šis stulpelis jau yra susietas su duomenų bazės lauku" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Šis laukas jau yra susietas su duomenų stulpeliu" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "Stulpelių susiejimas turi būti susietas su galiojančia importavimo sesija" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "Stulpelis neegzistuoja duomenų faile" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "Laukas neegzistuoja tiksliniame modelyje" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Pasirinktas laukas yra tik skaitomas" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Importavimo sesija" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Laukas" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Stulpelis" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Eilutės indeksas" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Pradiniai eilutės duomenys" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Klaidos" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Galiojantis" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "Etiketės spausdinamų kopijų skaičius" msgid "Connected" msgstr "Prijungta" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Nežinoma" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "Užsakymo nuoroda" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Neįvykdyta" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "Turi kainodarą" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Užbaigta prieš" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Užbaigta po" @@ -4779,17 +4815,17 @@ msgstr "Užbaigta po" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "Užsakymas" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Užsakymas įvykdytas" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Vidinė detalė" @@ -4797,27 +4833,27 @@ msgstr "Vidinė detalė" msgid "Order Pending" msgstr "Užsakymas laukia vykdymo" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Užbaigta" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Turi siuntą" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Pirkimo užsakymas" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "Pirkimo užsakymas" msgid "Sales Order" msgstr "Pardavimo užsakymas" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Užsakymo aprašymas (neprivalomas)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "Pasirinkite projekto kodą šiam užsakymui" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "Nuoroda į išorinį puslapį" @@ -4886,7 +4922,7 @@ msgstr "Pradžios data" msgid "Scheduled start date for this order" msgstr "Numatyta pradžios data šiam užsakymui" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Tikslinė data" @@ -4919,413 +4955,421 @@ msgstr "Kontaktinis asmuo šiam užsakymui" msgid "Company address for this order" msgstr "Įmonės adresas šiam užsakymui" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "Užsakymo nuoroda" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Būsena" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "Pirkimo užsakymo būsena" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "Įmonė, iš kurios užsakomos prekės" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "Tiekėjo nuoroda" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "Tiekėjo užsakymo nuorodos kodas" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "gavo" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "Data, kada užsakymas buvo užbaigtas" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "Paskirties vieta" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "Paskirties vieta gautoms prekėms" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "Detalių tiekėjas turi atitikti pirkimo užsakymo tiekėją" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "Eilutės įrašas neatitinka pirkimo užsakymo" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "Kiekis turi būti teigiamas skaičius" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Klientas" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "Įmonė, kuriai prekės parduodamos" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "Pardavimo užsakymo būsena" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "Kliento nuoroda" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "Kliento užsakymo nuorodos kodas" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "Siuntos data" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "išsiuntė" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "Užsakymas jau baigtas" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "Užsakymas jau atšauktas" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "Tik atviras užsakymas gali būti pažymėtas kaip užbaigtas" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Užsakymas negali būti užbaigtas, nes yra neišsiųstų siuntų" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Užsakymas negali būti užbaigtas, nes yra nepriskirtų prekių" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "Užsakymas negali būti užbaigtas, nes yra neužbaigtų eilučių" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "Užsakymas užrakintas ir negali būti keičiamas" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "Prekės kiekis" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1822 msgid "Line item reference" msgstr "Eilutės įrašo nuoroda" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "Eilutės įrašo pastabos" -#: order/models.py:1822 +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Tikslinė šio eilutės įrašo data (palikite tuščią, jei norite naudoti užsakymo tikslinę datą)" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "Eilutės įrašo aprašymas (neprivalomas)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "Papildomas kontekstas šiai eilutei" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "Vieneto kaina" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "Pirkimo užsakymo eilutės įrašas" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "Tiekėjo detalė turi atitikti tiekėją" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "Tiekėjo detalė" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "Gauta" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "Gautų prekių kiekis" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Pirkimo kaina" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "Vieneto pirkimo kaina" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "Pirkimo užsakymo papildoma eilutė" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "Pardavimo užsakymo eilutės įrašas" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "Tik parduodamos detalės gali būti priskirtos pardavimo užsakymui" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Pardavimo kaina" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "Vieneto pardavimo kaina" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Išsiųsta" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "Išsiųstas kiekis" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "Pardavimo užsakymo siunta" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "Siuntos data" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "Pristatymo data" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "Siuntos pristatymo data" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "Patikrino" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "Vartotojas, patikrinęs šią siuntą" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Siunta" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "Siuntos numeris" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "Sekimo numeris" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "Siuntos sekimo informacija" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "Sąskaitos faktūros numeris" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "Nuorodos numeris susijusiai sąskaitai faktūrai" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "Siunta jau buvo išsiųsta" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "Siunta neturi priskirtų prekių" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "Pardavimo užsakymo papildoma eilutė" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "Pardavimo užsakymo paskirstymas" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "Prekė nėra priskirta" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "Negalima priskirti prekių eilutei su skirtinga detale" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "Negalima priskirti prekių eilutei, jei joje nėra detalės" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Priskiriamas kiekis negali viršyti atsargų kiekio" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "Priskirtas kiekis turi būti didesnis nei nulis" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Kiekis turi būti 1, jei prekė turi serijos numerį" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "Pardavimo užsakymas nesutampa su siunta" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Siunta nesutampa su pardavimo užsakymu" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Eilutė" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "Pardavimo užsakymo siuntos nuoroda" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "Prekė" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "Pasirinkite atsargų elementą priskyrimui" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "Įveskite prekių priskyrimo kiekį" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "Grąžinimo užsakymo nuoroda" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "Įmonė, iš kurios grąžinamos prekės" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "Grąžinimo užsakymo būsena" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "Grąžinimo užsakymo eilutės įrašas" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "Turi būti nurodytas atsargų elementas" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "Grąžinamo kiekis viršija prekių kiekį" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "Grąžinamo kiekis turi būti daugiau nei nulis" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "Neteisingas kiekis serijinio numerio prekei" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "Pasirinkite prekę grąžinimui iš kliento" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "Gavimo data" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "Rezultatas" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "Rezultatas šiam eilutės įrašui" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "Išlaidos, susijusios su šio eilutės įrašo grąžinimu ar remontu" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "Grąžinimo užsakymo papildoma eilutė" @@ -5353,7 +5397,7 @@ msgstr "Kopijuoti papildomas eilutes" msgid "Copy extra line items from the original order" msgstr "Kopijuoti papildomas eilutes iš pradinio užsakymo" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Kopijuoti parametrus" @@ -5372,216 +5416,216 @@ msgstr "Eilutės įrašai" msgid "Completed Lines" msgstr "Užbaigtos eilutės" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Dubliuoti užsakymą" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Nurodykite užsakymo dubliavimo parinktis" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "Neteisingas užsakymo ID" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Tiekėjo pavadinimas" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Užsakymo atšaukti negalima" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Leisti užbaigti užsakymą su neužbaigtais eilutės įrašais" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Užsakyme yra neužbaigtų eilutės įrašų" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Užsakymas nėra atidarytas" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Automatinis kainų nustatymas" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Automatiškai apskaičiuoti pirkimo kainą pagal tiekėjo detalės duomenis" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Pirkimo kainos valiuta" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Sujungti elementus" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Sujungti elementus su ta pačia detale, paskirtimi ir tiksline data į vieną eilutės įrašą" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Vidinis detalės numeris" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Vidinis detalės pavadinimas" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Turi būti nurodyta tiekėjo detalė" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Turi būti nurodytas pirkimo užsakymas" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Tiekėjas turi atitikti pirkimo užsakymą" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Pirkimo užsakymas turi atitikti tiekėją" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Eilutės įrašas" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Pasirinkite paskirties vietą gautiems elementams" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Įveskite partijos kodą gaunamoms atsargoms" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Galiojimo data" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Įveskite galiojimo datą gaunamoms atsargoms" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Įveskite gaunamų atsargų serijos numerius" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Pakeisti gaunamų atsargų pakavimo informaciją" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Papildoma pastaba gaunamoms atsargoms" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Brūkšninis kodas" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Nuskaitytas brūkšninis kodas" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Brūkšninis kodas jau naudojamas" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Turi būti pateikti eilutės įrašai" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Turi būti nurodyta paskirties vieta" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Pateiktos brūkšninių kodų reikšmės turi būti unikalios" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Siuntos" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Užbaigtos siuntos" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Pardavimo kainos valiuta" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Paskirstyti elementai" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Nepateikta siuntos informacija" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Eilutės įrašas nėra susijęs su šiuo užsakymu" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Kiekis turi būti teigiamas" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Įveskite priskiriamus serijos numerius" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Siunta jau išsiųsta" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Siunta nėra susieta su šiuo užsakymu" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Nerasta atitikmenų šiems serijos numeriams" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Šie serijos numeriai nepasiekiami" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Grąžinimo užsakymo eilutės įrašas" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Eilutės įrašas neatitinka grąžinimo užsakymo" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Eilutės įrašas jau gautas" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Elementai gali būti priimami tik pagal vykdomus užsakymus" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Grąžinamas kiekis" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Eilutės kainos valiuta" @@ -5797,7 +5841,7 @@ msgstr "Numatytieji raktažodžiai detalėms šioje kategorijoje" msgid "Icon" msgstr "Piktograma" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Piktograma (neprivaloma)" @@ -5818,7 +5862,7 @@ msgstr "Numatytoji reikšmė" msgid "Default Parameter Value" msgstr "Numatytoji parametro reikšmė" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Detalės" @@ -5933,7 +5977,7 @@ msgstr "Detalės raktažodžiai, skirti pagerinti matomumą paieškos rezultatuo msgid "Part category" msgstr "Detalės kategorija" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" @@ -5942,7 +5986,7 @@ msgstr "IPN" msgid "Part revision or version number" msgstr "Detalės versija arba numeris" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Versija" @@ -5966,7 +6010,7 @@ msgstr "Numatytasis galiojimo laikas" msgid "Expiry time (in days) for stock items of this part" msgstr "Šios detalės atsargų galiojimo laikas (dienomis)" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimalus atsargų kiekis" @@ -6447,355 +6491,355 @@ msgstr "Detalių ryšio negalima sukurti tarp detalės ir jos pačios" msgid "Duplicate relationship already exists" msgstr "Toks ryšys jau egzistuoja" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Pagrindinė kategorija" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Pagrindinė detalių kategorija" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Subkategorijos" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Rezultatai" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Rezultatų skaičius, susietas su šiuo šablonu" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Šio atsargų elemento pirkimo valiuta" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "Failas nėra paveikslėlis" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Pradinė detalė" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Pasirinkite pradinę detalę kopijavimui" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Kopijuoti paveikslėlį" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Kopijuoti paveikslėlį iš pradinės detalės" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Kopijuoti BOM" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Kopijuoti komplektavimo žiniaraštį iš pradinės detalės" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Kopijuoti parametrų duomenis iš pradinės detalės" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Kopijuoti pastabas" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Kopijuoti pastabas iš pradinės detalės" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Pradinis atsargų kiekis" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Nurodykite pradinį atsargų kiekį šiai detalei. Jei kiekis nulis - atsargos nebus pridėtos." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Pradinė atsargų vieta" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Nurodykite pradinę atsargų vietą šiai detalei" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Pasirinkite tiekėją (arba palikite tuščią, jei nenorite nurodyti)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Pasirinkite gamintoją (arba palikite tuščią, jei nenorite nurodyti)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Gamintojo detalės numeris" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "Pasirinkta įmonė nėra galiojantis tiekėjas" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "Pasirinkta įmonė nėra galiojantis gamintojas" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Detalė su šiuo gamintojo numeriu (MPN) jau egzistuoja" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Tiekėjo detalė su šiuo SKU jau egzistuoja" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Kategorijos pavadinimas" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Surinkimas" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Atsargos" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Versijos" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Bendros atsargos" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Nepriskirtos atsargos" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Variantų atsargos" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Kopijuoti detalę" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Kopijuoti pradinius duomenis iš kitos detalės" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Pradinės atsargos" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Sukurti detalę su pradiniu atsargų kiekiu" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Tiekėjo informacija" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Pridėti pradinę tiekėjo informaciją šiai detalei" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Kopijuoti kategorijos parametrus" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Kopijuoti parametrų šablonus iš pasirinktos detalių kategorijos" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Esamas paveikslėlis" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Esamos detalės paveikslėlio failo pavadinimas" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Paveikslėlio failas neegzistuoja" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Patvirtinti visą komplektavimo žiniaraštį" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Galima surinkti" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Mažiausia kaina" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Pakeisti apskaičiuotą mažiausią kainą" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Mažiausios kainos valiuta" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Didžiausia kaina" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Pakeisti apskaičiuotą didžiausią kainą" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Didžiausios kainos valiuta" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Atnaujinti" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Atnaujinti šios detalės kainodarą" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Nepavyko konvertuoti iš nurodytų valiutų į {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Mažiausia kaina negali būti didesnė už didžiausią kainą" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Didžiausia kaina negali būti mažesnė už mažiausią kainą" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Pasirinkite pirminį surinkimą" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Pasirinkite komponentinę detalę" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Pasirinkite detalę, iš kurios kopijuoti BOM" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Pašalinti esamus duomenis" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Pašalinti esamus BOM elementus prieš kopijuojant" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Įtraukti paveldėtus" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Įtraukti BOM elementus, paveldėtus iš šabloninių detalių" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Praleisti netinkamas eilutes" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Įjunkite šią parinktį, jei norite praleisti netinkamas eilutes" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Kopijuoti pakaitines detales" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopijuoti pakaitines detales, kai kopijuojami BOM elementai" @@ -7516,7 +7560,7 @@ msgstr "Rėmelis" msgid "Print a border around each label" msgstr "Spausdinti rėmelį aplink kiekvieną etiketę" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "Gulsčias" @@ -7596,64 +7640,77 @@ msgstr "Suteikia palaikymą TME brūkšninių kodų nuskaitymui" msgid "The Supplier which acts as 'TME'" msgstr "Tiekėjas, veikiantis kaip 'TME'" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Tik personalo vartotojai gali tvarkyti įskiepius" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "Įskiepių diegimas išjungtas" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Įskiepis sėkmingai įdiegtas" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Įskiepis įdiegtas į {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "Įskiepis neaptiktas registre" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "Įskiepis nėra supakuotas įskiepis" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Įskiepio paketo pavadinimas nerastas" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Tik personalo vartotojai gali tvarkyti įskiepius" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "Įskiepių šalinimas išjungtas" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "Įskiepis negali būti pašalintas, nes šiuo metu yra aktyvus" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "Įskiepis neįdiegtas" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Įskiepio diegimas nerastas" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Įskiepis sėkmingai pašalintas" @@ -7900,55 +7957,55 @@ msgstr "Įdiegimas nepatvirtintas" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Pilnas perkrovimas" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Vykdyti pilną įskiepių registro perkrovimą" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Priverstinis perkrovimas" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Priverstinai perkrauti įskiepių registrą, net jei jis jau įkeltas" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Surinkti įskiepius" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Surinkti įskiepius ir įtraukti juos į registrą" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Aktyvuoti įskiepį" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Aktyvuoti šį įskiepį" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Ištrinti konfigūraciją" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Ištrinti įskiepio konfigūraciją iš duomenų bazės" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "Elementai" @@ -7964,7 +8021,7 @@ msgstr "Įskiepis nepalaiko etikečių spausdinimo" msgid "Invalid label dimensions" msgstr "Neleistini etiketės matmenys" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "Šablonui nepateikti galimi elementai" @@ -7988,152 +8045,156 @@ msgstr "Letter" msgid "Template file with this name already exists" msgstr "Šablono failas tokiu pavadinimu jau egzistuoja" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "Šablono pavadinimas" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "Šablono aprašymas" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "Versijos numeris (didinamas automatiškai)" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "Pridėti prie modelio spausdinant" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "Išsaugoti ataskaitą kaip priedą susietam modelio egzemplioriui spausdinimo metu" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "Failo vardo šablonas" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "Šablonas failų vardų generavimui" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "Šablonas įjungtas" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "Šablonui skirtas modelio tipas" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Filtrai" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "Šablono užklausos filtrai (kableliais atskirtas key=value porų sąrašas)" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "Šablono failas" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "Puslapio dydis PDF ataskaitoms" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "Rodyti ataskaitą gulsčiai" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "Ataskaita sugeneruota iš šablono {self.name}" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "Klaida generuojant ataskaitą" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Plotis [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "Etiketės plotis, nurodytas milimetrais" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Aukštis [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "Etiketės aukštis, nurodytas milimetrais" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "Klaida spausdinant etiketes" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "Fragmentas" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "Ataskaitos fragmento failas" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "Fragmento failo aprašymas" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "Išteklius" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "Ataskaitos ištekliaus failas" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "Ištekliaus failo aprašymas" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "Pasirinkite ataskaitos šabloną" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "Elementų pirminių raktų sąrašas, įtrauktinas į ataskaitą" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "Pasirinkite etiketės šabloną" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "Spausdinimo įskiepis" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "Pasirinkite įskiepį etikečių spausdinimui" @@ -8231,7 +8292,7 @@ msgstr "Atsargų elemento bandymo ataskaita" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Sumontuoti elementai" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "Žyma part_image reikalauja detalės (Part) egzemplioriaus" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "Žyma company_image reikalauja įmonės (Company) egzemplioriaus" @@ -8304,7 +8365,7 @@ msgstr "Filtruoti pagal aukščiausio lygio vietas" msgid "Include sub-locations in filtered results" msgstr "Įtraukti sub-vietas į filtravimo rezultatus" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Pirminė vieta" @@ -8388,7 +8449,7 @@ msgstr "Galiojimo data iki" msgid "Expiry date after" msgstr "Galiojimo data po" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Pasenusi" @@ -8522,7 +8583,7 @@ msgstr "Turi būti nurodyta detalė" msgid "Stock items cannot be located into structural stock locations!" msgstr "Atsargos negali būti patalpintos į struktūrines atsargų vietas!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Atsargų elementas negali būti sukurtas virtualioms detalėms" @@ -8567,7 +8628,7 @@ msgstr "Pasirinkite atitinkančią tiekėjo detalę šiam atsargų elementui" msgid "Where is this stock item located?" msgstr "Kur yra šis atsargų elementas?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Pakuotė, kurioje laikomas šis atsargų elementas" @@ -8583,7 +8644,7 @@ msgstr "Ar šis elementas yra sumontuotas kitame elemente?" msgid "Serial number for this item" msgstr "Šio elemento serijos numeris" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Šio atsargų elemento partijos kodas" @@ -8696,7 +8757,7 @@ msgstr "Atsargų elementas šiuo metu gaminamas" msgid "Serialized stock cannot be merged" msgstr "Su serijos numeriais pažymėtų atsargų sujungti negalima" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Pasikartojantys atsargų elementai" @@ -8820,7 +8881,7 @@ msgstr "Pasirinkite detalę serijos numeriui sugeneruoti" msgid "Quantity of serial numbers to generate" msgstr "Kiekis serijos numerių, kuriuos reikia sugeneruoti" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "Bandymo šablonas šiam rezultatui" @@ -8844,222 +8905,222 @@ msgstr "Pirminis elementas" msgid "Parent stock item" msgstr "Pirminis atsargų elementas" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Naudoti pakuotės dydį pridedant: nurodytas kiekis yra pakuočių skaičius" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Įveskite serijos numerius naujiems elementams" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Tiekėjo detalės numeris" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Nebegaliojantis" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Antriniai elementai" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "Sekami elementai" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "Šio atsargų elemento pirkimo kaina, vienetui arba pakuotei" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Įveskite atsargų elementų, kuriuos reikia serializuoti, skaičių" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Kiekis negali viršyti galimų atsargų kiekio ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Paskirties atsargų vieta" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Šiai detalei negali būti priskirti serijos numeriai" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Serijos numeriai jau egzistuoja" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Pasirinkite atsargų elementą montavimui" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Montuojamas kiekis" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Įveskite montuojamų elementų kiekį" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Pridėkite operacijos pastabą (neprivaloma)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "Montuojamas kiekis turi būti bent 1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Atsargų elementas nepasiekiamas" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Pasirinktos detalės nėra komplektavimo žiniaraštyje" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "Montuojamas kiekis negali viršyti turimo kiekio" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Paskirties vieta išmontuotam elementui" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Pasirinkite detalę, į kurią konvertuoti atsargų elementą" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "Pasirinkta detalė netinkama konvertavimui" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Negalima konvertuoti atsargų elemento, kuriam priskirta tiekėjo detalė" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Atsargų elemento būsenos kodas" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Pasirinkite atsargų elementus būsenai pakeisti" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Nepasirinkti jokie atsargų elementai" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Sub-vietos" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Pirminė atsargų vieta" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Detalė turi būti parduodama" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Elementas priskirtas pardavimo užsakymui" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Elementas priskirtas gamybos užsakymui" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Klientas, kuriam priskiriami atsargų elementai" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "Pasirinkta įmonė nėra klientas" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Atsargų priskyrimo pastabos" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Turi būti pateiktas atsargų elementų sąrašas" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Atsargų sujungimo pastabos" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Leisti skirtingus tiekėjus" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Leisti sujungti atsargų elementus su skirtingomis tiekėjų detalėmis" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Leisti skirtingas būsenas" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Leisti sujungti atsargų elementus su skirtingais būsenos kodais" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Turi būti pateikti bent du atsargų elementai" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Be pakeitimų" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Atsargų elemento pirminio rakto reikšmė" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "Atsargų elemento nėra sandėlyje" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Atsargų operacijos pastabos" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "Kitas serijos numeris" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "Ankstesnis serijos numeris" @@ -9541,83 +9602,99 @@ msgstr "Pardavimo užsakymai" msgid "Return Orders" msgstr "Grąžinimo užsakymai" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Vartotojo vardas" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Vardas" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Vartotojo vardas" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Pavardė" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Vartotojo pavardė" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Vartotojo el. pašto adresas" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Personalas" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Ar šis vartotojas turi personalo leidimus" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Supervartotojas" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Ar šis vartotojas yra supervartotojas" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Ar ši vartotojo paskyra yra aktyvi" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Tik supervartotojas gali keisti šį lauką" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "Neturite leidimo kurti vartotojų" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Jūsų paskyra sukurta." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Prisijungimui naudokite slaptažodžio atstatymo funkciją" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Sveiki atvykę į InvenTree" diff --git a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po index 6c19dfc777..bfd0d048c7 100644 --- a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Latvian\n" "Language: lv_LV\n" @@ -49,7 +49,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Lietotājam nav atļaujas, lai apskatītu šo modeli" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Nevarēja konvertēt {original} par {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Norādītais daudzums nav derīgs" @@ -104,13 +104,13 @@ msgstr "Ievadiet datumu" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Piezīmes" @@ -123,75 +123,91 @@ msgstr "Vērtība '{name}' neparādās vajadzīgajā formātā" msgid "Provided value does not match required pattern: " msgstr "Norādītā vērtība neatbilst nepieciešamajam formātam: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Tukša sērijas numura rinda" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Atkārtojas sērijas numurs" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Grupas diapazons {group} pārsniedz pieļaujamo daudzumu ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Netika atrasts neviens sērijas numurs" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Noņemiet HTML tagus no šīs vērtības" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Savienojuma kļūda" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Serveris atbildēja ar nederīgu statusa kodu" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Radās izņēmums" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Serveris atbildēja ar nederīgu Content-Length vērtību" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Attēla izmērs ir pārāk liels" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Attēla lejupielāde pārsniedz maksimālo izmēru" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Attālais serveris atgrieza tukšu atbildi" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Norādītajā URL nav derīgs attēla fails" @@ -199,7 +215,7 @@ msgstr "Norādītajā URL nav derīgs attēla fails" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "" @@ -320,51 +336,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "" @@ -545,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -653,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -671,32 +687,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -704,26 +720,26 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -845,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -875,7 +891,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" @@ -948,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -964,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1001,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1083,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1534,11 +1550,11 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "" @@ -1600,7 +1616,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "" @@ -1633,10 +1649,10 @@ msgstr "" msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1660,11 +1676,11 @@ msgstr "" msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "" @@ -1714,7 +1730,7 @@ msgstr "" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "" msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "" @@ -1797,7 +1813,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "" @@ -1998,334 +2014,334 @@ msgstr "" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "" @@ -4163,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4181,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4210,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4258,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4307,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4797,27 +4833,27 @@ msgstr "" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4919,413 +4955,421 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "" -#: order/models.py:1800 -msgid "Line item reference" +#: order/models.py:1814 +msgid "Line Number" msgstr "" -#: order/models.py:1807 -msgid "Line item notes" +#: order/models.py:1815 +msgid "Line number for this item (optional)" msgstr "" #: order/models.py:1822 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1829 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5372,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5797,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5818,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5933,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "" @@ -5966,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8583,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8696,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:240 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po index 978d02cb47..94812a6f16 100644 --- a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -23,7 +23,7 @@ msgstr "API eindpunt niet gevonden" #: InvenTree/api.py:438 msgid "List of items must be provided for bulk operation" -msgstr "" +msgstr "Lijst met items of filters moet worden opgegeven voor bulk bewerking" #: InvenTree/api.py:445 msgid "Items must be provided as a list" @@ -49,7 +49,7 @@ msgstr "Geen gegevens verstrekt" msgid "This field must be unique." msgstr "Dit veld moet uniek zijn" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Gebruiker heeft geen rechten om dit model te bekijken" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "{original} kon niet worden omgezet naar {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Ongeldige hoeveelheid ingevoerd" @@ -104,13 +104,13 @@ msgstr "Voer datum in" msgid "Invalid decimal value" msgstr "Ongeldige decimale waarde" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Opmerkingen" @@ -123,75 +123,91 @@ msgstr "Waarde '{name}' verschijnt niet in patroonformaat" msgid "Provided value does not match required pattern: " msgstr "Opgegeven waarde komt niet overeen met vereist patroon: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Kan niet meer dan 1000 items tegelijk serienummers geven." -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Leeg serienummer" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Duplicaat serienummer" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Ongeldige groep: {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Groepsbereik {group} overschrijdt toegestane hoeveelheid ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Geen serienummers gevonden" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Hoeveelheid van unieke serienummers ({n}) moet overeenkomen met de hoeveelheid ({q})" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Verwijder HTML tags van deze waarde" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "Gegevens bevatten verboden markdown inhoud" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "Ongeldige URL: geen hostnaam" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "Ongeldige URL: hostnaam kon niet worden opgelost" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "URL-punten naar een privé of gereserveerd IP-adres" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "Te veel doorverwijzingen" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Verbindingsfout" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Server reageerde met ongeldige statuscode" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Uitzondering opgetreden" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Server reageerde met ongeldige Content-Length waarde" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Afbeeldingsformaat is te groot" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Beelddownload overschrijdt de maximale grootte" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Externe server heeft lege reactie teruggegeven" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Opgegeven URL is geen geldig afbeeldingsbestand" @@ -199,7 +215,7 @@ msgstr "Opgegeven URL is geen geldig afbeeldingsbestand" msgid "Log in to the app" msgstr "Log in op de app" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-mail" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Ongeldige keuze" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Naam" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Omschrijving" msgid "Description (optional)" msgstr "Omschrijving (optioneel)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Pad" @@ -320,51 +336,51 @@ msgstr "Er is een fout gelogd door de server." msgid "Image" msgstr "Afbeelding" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Moet een geldig nummer zijn" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Selecteer valuta uit beschikbare opties" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Dit veld mag niet nul zijn." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Ongeldige waarde" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Externe afbeelding" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL van extern afbeeldingsbestand" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Afbeeldingen van externe URL downloaden is niet ingeschakeld" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Fout bij het downloaden van afbeelding van externe URL" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "Ongeldig inhoudstype" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "Inhoudstype niet gevonden" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "Content type komt niet overeen met de vereiste mixin klasse" @@ -520,11 +536,11 @@ msgstr "Chinees (vereenvoudigd)" msgid "Chinese (Traditional)" msgstr "Chinees (traditioneel)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Update beschikbaar" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "Een update voor Inventree is beschikbaar" @@ -536,7 +552,7 @@ msgstr "Ongeldige fysieke eenheid" msgid "Not a valid currency code" msgstr "Geen geldige valutacode" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Status van bestelling" @@ -545,21 +561,21 @@ msgstr "Status van bestelling" msgid "Parent Build" msgstr "Bovenliggende Productie" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Inclusief varianten" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "Inclusief varianten" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "Inclusief varianten" msgid "Part" msgstr "Onderdeel" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categorie" @@ -653,16 +669,16 @@ msgstr "Boomstructuur uitsluiten" msgid "Build must be cancelled before it can be deleted" msgstr "Productie moet geannuleerd worden voordat het kan worden verwijderd" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Verbruiksartikelen" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Optioneel" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Samenstelling" @@ -671,59 +687,59 @@ msgstr "Samenstelling" msgid "Tracked" msgstr "Gevolgd" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testbaar" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Openstaande order" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Toegewezen" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Verbruikt" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Beschikbaar" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "In bestelling" #: build/api.py:671 msgid "Build not found" -msgstr "" +msgstr "Build niet gevonden" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Productieorder" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Locatie" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Uitvoer" @@ -767,8 +783,8 @@ msgstr "Doeldatum moet na startdatum zijn" msgid "Build Order Reference" msgstr "Productieorderreferentie" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Verkooporder Referentie" msgid "Sales Order to which this build is allocated" msgstr "Productieopdracht waar dit productie aan is toegewezen" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Bronlocatie" @@ -845,16 +861,16 @@ msgstr "Productiestatus" msgid "Build status code" msgstr "Productiestatuscode" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Batchcode" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Batchcode voor deze productieuitvoer" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Aanmaakdatum" @@ -875,7 +891,7 @@ msgstr "Verwachte opleveringsdatum" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Doeldatum voor productie voltooiing. Productie zal achterstallig zijn na deze datum." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Opleveringsdatum" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Prioriteit van deze bouwopdracht" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Project code" @@ -948,7 +964,7 @@ msgstr "Productieorder {build} is voltooid" msgid "A build order has been completed" msgstr "Een productieorder is voltooid" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Serienummers moeten worden opgegeven voor traceerbare onderdelen" @@ -964,23 +980,23 @@ msgstr "Productie uitvoer is al voltooid" msgid "Build output does not match Build Order" msgstr "Productuitvoer komt niet overeen met de Productieorder" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Hoeveelheid moet groter zijn dan nul" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Hoeveelheid kan niet groter zijn dan aantal" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "Build output heeft niet alle vereiste tests doorstaan" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Build output {serial} heeft niet alle vereiste tests doorstaan" @@ -1001,10 +1017,10 @@ msgstr "Bouw order regel item" msgid "Build object" msgstr "Bouw object" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Bouw object" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "Hoeveelheid moet 1 zijn voor geserialiseerde voorraad" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Toegewezen hoeveelheid ({q}) mag de beschikbare voorraad ({a}) niet overschrijden" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "Voorraad item is te veel toegewezen" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Voorraadartikel" @@ -1083,378 +1099,378 @@ msgstr "Bestemming voorraadartikel" msgid "Build Level" msgstr "Bouw level" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Onderdeel naam" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Productieuitvoer" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Productieuitvoer komt niet overeen met de bovenliggende productie" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Uitvoeronderdeel komt niet overeen met productieorderonderdeel" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Deze productieuitvoer is al voltooid" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Deze productieuitvoer is niet volledig toegewezen" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Voer hoeveelheid in voor productie uitvoer" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Hoeveelheid als geheel getal vereist voor traceerbare onderdelen" -#: build/serializers.py:337 +#: build/serializers.py:344 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:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serienummers" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Voer serienummers in voor productieuitvoeren" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Voorraad locatie voor project uitvoer" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Serienummers automatisch toewijzen" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Vereiste artikelen automatisch toewijzen met overeenkomende serienummers" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "De volgende serienummers bestaan al of zijn ongeldig" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Een lijst van productieuitvoeren moet worden verstrekt" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Voorraadlocatie voor geannuleerde outputs" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Toewijzingen weggooien" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Verwijder alle voorraadtoewijzingen voor geannuleerde outputs" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Reden voor annulering van bouworder(s)" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Locatie van voltooide productieuitvoeren" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Incomplete Toewijzing Accepteren" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Voltooi de uitvoer als de voorraad niet volledig is toegewezen" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Toegewezen voorraad gebruiken" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Verbruik elke voorraad die al is toegewezen aan deze build" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Verwijder Incomplete Uitvoeren" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Verwijder alle productieuitvoeren die niet zijn voltooid" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Niet toegestaan" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Accepteer zoals geconsumeerd onder deze bouwopdracht" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "De-alloceren voordat deze bouwopdracht voltooid wordt" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Overgealloceerde voorraad" -#: build/serializers.py:757 +#: build/serializers.py:764 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:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Sommige voorraadartikelen zijn overalloceerd" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Accepteer Niet-toegewezen" -#: build/serializers.py:775 +#: build/serializers.py:782 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:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Vereiste voorraad is niet volledig toegewezen" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Accepteer Onvolledig" -#: build/serializers.py:793 +#: build/serializers.py:800 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:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Vereiste productiehoeveelheid is voltooid" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "Bouw opdracht heeft open sub bouw orders" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Bouwen moet in de productiestatus staan" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Productieorder heeft onvolledige uitvoeren" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Productielijn" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Productieuitvoer" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Productieuitvoer moet naar dezelfde productie wijzen" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Bouw lijn-item" -#: build/serializers.py:926 +#: build/serializers.py:933 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:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Artikel moet op voorraad zijn" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Beschikbare hoeveelheid ({q}) overschreden" -#: build/serializers.py:991 +#: build/serializers.py:998 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:999 +#: build/serializers.py:1006 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:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Allocaties voor artikelen moeten worden opgegeven" -#: build/serializers.py:1087 +#: build/serializers.py:1094 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:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Locatie uitsluiten" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Voorraadartikelen van deze geselecteerde locatie uitsluiten" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Uitwisselbare voorraad" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Voorraadartikelen op meerdere locaties kunnen uitwisselbaar worden gebruikt" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Vervangende Voorraad" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Toewijzing van vervangende onderdelen toestaan" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Optionele Items" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Alloceer optionele BOM items om bestelling te bouwen" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "Alle artikelen" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "Niet Gevolgde items" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "Gevolgde Items" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "Item Type" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "Selecteer item type om automatisch toe te wijzen" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "BOM referentie" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "BOM onderdeel ID" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "BOM onderdeel naam" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "Instaleeren Op" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Bouwen" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Leveranciersonderdeel" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Toegewezen hoeveelheid" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Bouw referentie" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Naam categorie onderdeel" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Volgbaar" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Overgenomen" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Varianten toestaan" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Stuklijstartikel" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "In productie" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Gepland om te bouwen" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Externe voorraad" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Beschikbare Voorraad" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Beschikbare vervanging voorraad" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Beschikbare varianten voorraad" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "Verbruikte hoeveelheid overschrijdt toegewezen hoeveelheid" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "Optionele notities voor voorraadverbruik" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "Het bouwelement moet verwijzen naar de juiste bouwopdracht" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "Dupliceer build item allocatie" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "Build line moet verwijzen naar de juiste bouwopdracht" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "Dupliceer build line toewijzing" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "Ten minste één item of regel moet worden opgegeven" @@ -1478,7 +1494,7 @@ msgstr "In de wacht" msgid "Cancelled" msgstr "Geannuleerd" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "Achterstallige Productieorder" msgid "Build order {bo} is now overdue" msgstr "Productieorder {bo} is nu achterstallig" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "Is koppeling" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "Is een bestand" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "Gebruiker heeft geen toestemming om deze bijlagen te verwijderen" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Gebruiker heeft geen toestemming om deze bijlage te verwijderen." @@ -1534,11 +1550,11 @@ msgstr "Geen geldige valuta codes opgegeven" msgid "No plugin" msgstr "Geen plug-in gevonden" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Projectcode label" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Bijgewerkt" @@ -1600,7 +1616,7 @@ msgstr "Sleutelreeks moet uniek zijn" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Gebruiker" msgid "Price break quantity" msgstr "Prijs pauze hoeveelheid" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Prijs" @@ -1633,10 +1649,10 @@ msgstr "Eindpunt waarop deze webhook wordt ontvangen" msgid "Name for this webhook" msgstr "Naam van deze webhook" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Actief" @@ -1660,11 +1676,11 @@ msgstr "Geheim" msgid "Shared secret for HMAC" msgstr "Gedeeld geheim voor HMAC" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "Bericht ID" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "Unieke identificatie voor dit bericht" @@ -1714,7 +1730,7 @@ msgstr "Titel" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Auteur" msgid "Summary" msgstr "Samenvatting" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Gelezen" @@ -1797,7 +1813,7 @@ msgstr "Ontbrekend bestand" msgid "Missing external link" msgstr "Externe link ontbreekt" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "Model type" @@ -1833,7 +1849,7 @@ msgstr "Bestandsgrootte" msgid "File size in bytes" msgstr "Bestandsgrootte in bytes" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Ongeldig modeltype opgegeven voor bijlage" @@ -1861,7 +1877,7 @@ msgstr "Logische sleutel" msgid "State logical key that is equal to this custom state in business logic" msgstr "Staat logische sleutel die gelijk is aan deze staat in zakelijke logica" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Waarde" @@ -1874,7 +1890,7 @@ msgstr "De numerieke waarde die wordt opgeslagen in de modellendatabase" msgid "Name of the state" msgstr "Naam van de toestand" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Label" @@ -1930,7 +1946,7 @@ msgstr "Logische sleutel moet in de logische sleutels van de referentiestatus st msgid "Name must be different from the names of the reference status" msgstr "Naam moet anders zijn dan de namen van de referentie status" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "Keuzelijst" @@ -1982,7 +1998,7 @@ msgstr "Standaard vermelding" msgid "Default entry for this selection list" msgstr "Standaard vermelding voor deze selectielijst" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Gecreëerd" @@ -1998,334 +2014,334 @@ msgstr "Laatst bijgewerkt" msgid "Date and time that the selection list was last updated" msgstr "Datum en tijd waarop de selectielijst voor het laatst is bijgewerkt" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "Selectielijst item" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "Selectielijst item" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "Selectielijst waaraan dit item hoort" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "Naam van de selectielijst" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "Label voor het item in de selectielijst" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "Beschrijving van het item in de selectielijst" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "Is dit item in deze lijst actief?" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "Parameter sjabloon" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "Parameter sjablonen" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "Checkbox parameters kunnen geen eenheden bevatten" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "Checkbox parameters kunnen geen eenheden bevatten" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "Keuzes moeten uniek zijn" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "De template van de parameter moet uniek zijn" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "Doelmodeltype voor dit parametersjabloon" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "Parameternaam" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "Eenheden" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "Fysieke eenheden voor deze parameter" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "Parameter omschrijving" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "Selectievakje" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "Is deze parameter een selectievak?" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "Keuzes" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "Geldige keuzes voor deze parameter (komma gescheiden)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "Lijst met selecties voor deze parameter" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Ingeschakeld" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "Is dit parametersjabloon ingeschakeld?" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "Parameter" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "Parameters" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "Ongeldige keuze voor parameter waarde" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Ongeldig modeltype opgegeven voor parameter" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "Model-ID" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "ID van het doelmodel voor deze parameter" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Sjabloon" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "Parameter sjabloon" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Gegevens" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "Parameterwaarde" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Opmerking" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Optioneel notities veld" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "Barcode Scan" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "Barcode gegevens" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "Gebruiker die de barcode gescand heeft" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "Tijdstempel" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "Datum en tijd van de streepjescode scan" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "Adres eindpunt dat de streepjescode verwerkt" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "Inhoud" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "Contextgegevens voor de barcode scan" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "Reactie" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "Reactiegegevens van de barcode scan" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Resultaat" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "Was de barcode succesvol gescand?" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "Er is een fout opgetreden" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: E-maillog verwijderen wordt beschermd. Zet INVENTREE_PROTECT_EMAIL_LOG naar False om verwijdering toe te staan." -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "E-mailbericht" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "E-mail berichten" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "Aangekondigd" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "Verzonden" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "Mislukt" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "Geleverd" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "Bevestigd" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "Inkomend" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "Uitgaand" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "Geen antwoord" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "Track levering" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "Track gelezen" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "Track Klik" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "Globaal ID" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identificatie voor dit bericht (kan worden geleverd door een extern systeem)" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "Discussie ID" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identificatie voor deze bericht draad (kan worden geleverd door een extern systeem)" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "Gesprek" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "Gekoppeld onderwerp voor dit bericht" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "Prioriteit" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "E-mail gesprekken" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "E-mail gesprekken" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Sleutel" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "Unieke sleutel voor deze thread (gebruikt om de conversatie te identificeren)" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "Unieke identificatie voor dit bericht" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "Intern gestart" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "Is dit onderwerp intern gestart?" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "Datum en tijd waarop de conversatie voor het laatst is bijgewerkt" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "Datum en tijd waarop de conversatie voor het laatst is bijgewerkt" @@ -2375,1243 +2391,1259 @@ msgstr "Geeft aan of de instelling overschreven wordt door een omgevingsvariabel msgid "Override" msgstr "Overschrijven" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Is actief" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Openstaande taken" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Geplande taken" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Mislukte taken" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Taak ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Unieke taak ID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Vergrendel" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Tijdstip van vergrendeling" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Naam van de taak" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Functie" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Functie naam" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumenten" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Taak argumenten" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Trefwoord argumenten" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Taak trefwoord argumenten" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Bestandsnaam" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Model type" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Gebruiker heeft geen toestemming om bijlagen voor dit model te maken of te bewerken" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "Gebruiker heeft geen toestemming om parameters voor dit model te maken of te bewerken" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Lijst met selecties is vergrendeld" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Geen groep" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "Website URL is vergrendeld door configuratie" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Opnieuw opstarten vereist" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Een instelling is gewijzigd waarvoor een herstart van de server vereist is" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Migraties in behandeling" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Aantal nog openstaande database migraties" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Actieve waarschuwingscodes" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "Een reeks actieve waarschuwingscodes" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "Instantie Id" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Unieke identificatie voor deze InvenTree instantie" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "Aankondiging ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Kondig de instantie ID van de server aan in de server status info (ongeautoriseerd)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "ID Serverinstantie" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Stringbeschrijving voor de server instantie" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Gebruik de instantie naam" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Gebruik de naam van de instantie in de titelbalk" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Tonen `over` beperken" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Toon de `over` modal alleen aan superusers" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "Toon superuser banner" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "Toon een waarschuwings-banner in de UI wanneer ingelogd als superuser" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "Toon admin banner" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "Toon een waarschuwings-banner in de UI wanneer ingelogd als admin" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Bedrijfsnaam" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "Interne bedrijfsnaam" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "Basis-URL" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "Basis URL voor serverinstantie" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Standaard Valuta" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "Selecteer basisvaluta voor de berekening van prijzen" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "Ondersteunde valuta" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "Lijst van ondersteunde valuta codes" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "Valuta update interval" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Hoe vaak te controleren op updates (nul om uit te schakelen)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "dagen" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "Valuta update plug-in" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "Munteenheid update plug-in om te gebruiken" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "Download van URL" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "Download van afbeeldingen en bestanden vanaf een externe URL toestaan" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "Download limiet" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "Maximale downloadgrootte voor externe afbeelding" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "User-agent gebruikt om te downloaden van URL" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Sta toe om de user-agent te overschrijven die gebruikt wordt om afbeeldingen en bestanden van externe URL te downloaden (laat leeg voor de standaard)" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "Strikte URL validatie" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "Vereis schema specificatie bij het valideren van URLs" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "Interval voor update" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "Hoe vaak te controleren op updates (nul om uit te schakelen)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Automatische backup" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "Automatische back-up van database- en mediabestanden inschakelen" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "Automatische backup interval" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "Geef het aantal dagen op tussen geautomatiseerde backup" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "Interval Taak Verwijderen" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "Resultaten van achtergrondtaken worden verwijderd na het opgegeven aantal dagen" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "Error Log Verwijderings Interval" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "Resultaten van achtergrondtaken worden verwijderd na het opgegeven aantal dagen" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "Interval Verwijderen Notificatie" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "Meldingen van gebruikers worden verwijderd na het opgegeven aantal dagen" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "E-mail verwijderen interval" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "E-mailberichten zullen worden verwijderd na het opgegeven aantal dagen" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "Bescherm e-maillogboeken" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "Voorkom het verwijderen van e-mail logs" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Streepjescodeondersteuning" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "Schakel barcodescanner ondersteuning in in de webinterface" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "Sla de resultaten van de barcode op" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "Sla de barcode scan resultaten op in de database" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "Maximale aantal Barcode Scans" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "Maximum aantal resultaten van de barcode scan op te slaan" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "Barcode Invoer Vertraging" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "Barcode invoerverwerking vertraging" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "Barcode Webcam Ondersteuning" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "Barcode via webcam scannen in browser toestaan" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "Barcode gegevens" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "Geef barcode gegevens weer in browser als tekst" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "Streepjescode Plug-in" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "Plug-in om te gebruiken voor interne barcode data genereren" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "Herzieningen onderdeel" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "Revisieveld voor onderdeel inschakelen" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "Alleen assemblee revisie" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "Alleen revisies toestaan voor assemblageonderdelen" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "Verwijderen uit Assemblage toestaan" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "Verwijderen van onderdelen die in een groep worden gebruikt toestaan" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "Regulier expressiepatroon voor het overeenkomende Onderdeel IPN" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "Duplicaat IPN toestaan" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "Toestaan dat meerdere onderdelen dezelfde IPN gebruiken" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "Bewerken IPN toestaan" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "Sta het wijzigen van de IPN toe tijdens het bewerken van een onderdeel" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "Kopieer Onderdeel Stuklijstgegevens" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopieer standaard stuklijstgegevens bij het dupliceren van een onderdeel" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "Kopieer Onderdeel Parametergegevens" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "Parametergegevens standaard kopiëren bij het dupliceren van een onderdeel" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "Kopieer Onderdeel Testdata" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "Testdata standaard kopiëren bij het dupliceren van een onderdeel" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "Kopiëer Categorieparameter Sjablonen" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "Kopieer categorieparameter sjablonen bij het aanmaken van een onderdeel" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "Onderdelen zijn standaard sjablonen" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "Onderdelen kunnen standaard vanuit andere componenten worden samengesteld" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Onderdeel" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "Onderdelen kunnen standaard worden gebruikt als subcomponenten" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Koopbaar" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "Onderdelen kunnen standaard gekocht worden" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Verkoopbaar" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "Onderdelen kunnen standaard verkocht worden" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "Onderdelen kunnen standaard gevolgd worden" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Virtueel" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "Onderdelen zijn standaard virtueel" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "Verwante onderdelen tonen" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "Verwante onderdelen voor een onderdeel tonen" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "Initiële voorraadgegevens" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "Aanmaken van eerste voorraad toestaan bij het toevoegen van een nieuw onderdeel" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "Initiële leveranciergegevens" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Aanmaken van eerste leveranciersgegevens toestaan bij het toevoegen van een nieuw onderdeel" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "Onderdelennaam Weergaveopmaak" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "Opmaak om de onderdeelnaam weer te geven" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "Standaardicoon voor onderdeel catagorie" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "Standaardicoon voor onderdeel catagorie (leeg betekent geen pictogram)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "Minimaal aantal prijs decimalen" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Minimaal aantal decimalen om weer te geven bij het weergeven van prijsgegevens" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "Maximum prijs decimalen" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maximum aantal decimalen om weer te geven bij het weergeven van prijsgegevens" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "Gebruik leveranciersprijzen" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Prijsvoordelen leveranciers opnemen in de totale prijsberekening" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "Aankoopgeschiedenis overschrijven" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historische order prijzen overschrijven de prijzen van de leverancier" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "Gebruik voorraaditem prijzen" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Gebruik prijzen van handmatig ingevoerde voorraadgegevens voor prijsberekeningen" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "Voorraad artikelprijs leeftijd" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Voorraaditems ouder dan dit aantal dagen uitsluiten van prijsberekeningen" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "Gebruik variantprijzen" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "Variantenprijzen opnemen in de totale prijsberekening" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "Alleen actieve varianten" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "Gebruik alleen actieve variantonderdelen voor het berekenen van variantprijzen" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "Prijzen automatisch bijwerken" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "Automatisch prijzen van onderdelen bijwerken wanneer interne gegevens veranderen" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "Prijzen Herbouw interval" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "Aantal dagen voordat de prijzen voor onderdelen automatisch worden bijgewerkt" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Interne Prijzen" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "Inschakelen van interne prijzen voor onderdelen" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "Interne prijs overschrijven" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "Indien beschikbaar, interne prijzen overschrijven berekeningen van prijsbereik" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" -msgstr "" +msgstr "BOM Zero Quantity toestaan" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "Printen van labels Inschakelen" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "Printen van labels via de webinterface inschakelen" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "Label Afbeelding DPI" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI resolutie bij het genereren van afbeelginsbestanden voor label printer plugins" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Activeer Rapportages" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "Activeer het genereren van rapporten" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "Foutopsporingsmodus" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "Rapporten genereren in debug modus (HTML uitvoer)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "Log fouten" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "Registreer fouten die optreden bij het genereren van rapporten" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Paginagrootte" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "Standaard paginagrootte voor PDF rapporten" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "Forceer Parameter Eenheden" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "Als er eenheden worden opgegeven, moeten parameterwaarden overeenkomen met de opgegeven eenheden" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "Globaal unieke serienummers" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "Serienummers voor voorraaditems moeten globaal uniek zijn" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "Verwijder uitgeputte voorraad" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "Bepaalt standaard gedrag wanneer een voorraadartikel leeg is" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "Batchcode Sjabloon" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "Sjabloon voor het genereren van standaard batchcodes voor voorraadartikelen" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "Verlopen Voorraad" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "Verlopen voorraad functionaliteit inschakelen" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "Verkoop Verlopen Voorraad" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "Verkoop verlopen voorraad toestaan" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "Voorraad Vervaltijd" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "Aantal dagen voordat voorraadartikelen als verouderd worden beschouwd voor ze verlopen" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "Produceer Verlopen Voorraad" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "Sta productie met verlopen voorraad toe" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "Voorraad Eigenaar Toezicht" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "Eigenaarstoezicht over voorraadlocaties en items inschakelen" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "Voorraadlocatie standaard icoon" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "Standaard locatie pictogram (leeg betekent geen icoon)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "Geïnstalleerde voorraad items weergeven" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "Geïnstalleerde voorraadartikelen in voorraadtabellen tonen" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "Controleer BOM bij het installeren van items" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Geïnstalleerde voorraad items moeten in de BOM voor het bovenliggende deel bestaan" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "Sta 'Niet op voorraad overschrijving' toe" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Toestaan dat voorraadartikelen die niet op voorraad zijn worden overgebracht tussen voorraadlocaties" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "Productieorderreferentiepatroon" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "Vereist patroon voor het genereren van het Bouworderreferentieveld" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "Vereis verantwoordelijke eigenaar" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "Een verantwoordelijke eigenaar moet worden toegewezen aan elke bestelling" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "Vereist een actief onderdeel" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "Voorkom het maken van orders voor inactieve onderdelen" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "Vergrendeld onderdeel vereisen" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "Voorkom het maken van orders voor ontgrendelde onderdelen" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "Vereist een geldige BOM" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "Voorkom het creëren van bouworders tenzij BOM is gevalideerd" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "Onderliggende bestellingen vereist" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "Voorkom voltooiing van de bouw tot alle sub orders gesloten zijn" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "Externe Bouw Orders" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "Inschakelen externe build order functionaliteit" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Blokkeren tot test geslaagd" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Voorkom dat de bouw van de uitvoer wordt voltooid totdat alle vereiste testen zijn geslaagd" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "Retourorders inschakelen" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "Retourorder functionaliteit inschakelen in de gebruikersinterface" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "Retourorder referentie patroon" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "Verplicht patroon voor het genereren van Retourorder referentie veld" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "Bewerk voltooide retourorders" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "Bewerken van retourorders toestaan nadat deze zijn voltooid" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "Verkooporderreferentiepatroon" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "Vereist patroon voor het genereren van het Verkooporderreferentieveld" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "Standaard Verzending Verkooporder" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "Aanmaken standaard verzending bij verkooporders inschakelen" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "Bewerk voltooide verkooporders" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Bewerken van verkooporders toestaan nadat deze zijn verzonden of voltooid" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "Zending moet gecontroleerd worden" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "Voorkom voltooiing van verzendingen totdat items zijn gecontroleerd" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "Verstuurde bestellingen markeren als voltooid" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Verkooporders gemarkeerd als verzonden zullen automatisch worden voltooid, zonder de status \"verzonden\"" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "Inkooporderreferentiepatroon" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "Vereist patroon voor het genereren van het Inkooporderreferentieveld" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "Bewerk voltooide verkooporders" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Bewerken van inkooporders toestaan nadat deze zijn verzonden of voltooid" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "Valuta converteren" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "Verander artikelwaarde naar basisvaluta bij het ontvangen van voorraad" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "Inkooporders automatisch voltooien" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Markeer orders automatisch als voltooid wanneer alle regelitems worden ontvangen" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Wachtwoord vergeten functie inschakelen" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "Wachtwoord vergeten functie inschakelen op de inlogpagina's" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Registratie inschakelen" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "Zelfregistratie voor gebruikers op de inlogpagina's inschakelen" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "SSO inschakelen" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "SSO inschakelen op de inlogpagina's" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "Schakel gebruikersregistratie met SSO in" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Zelfregistratie voor gebruikers middels SSO op de inlogpagina's inschakelen" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "SSO-groep synchroniseren inschakelen" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Inschakelen van het synchroniseren van InvenTree groepen met groepen geboden door de IdP" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "SSO groep sleutel" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "De naam van de groepen claim attribuut van de IdP" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "SSO groep kaart" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Een mapping van SSO-groepen naar lokale InvenTree groepen. Als de lokale groep niet bestaat, zal deze worden aangemaakt." -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "Verwijder groepen buiten SSO" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Of groepen die zijn toegewezen aan de gebruiker moeten worden verwijderd als ze geen backend zijn door de IdP. Het uitschakelen van deze instelling kan beveiligingsproblemen veroorzaken" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "E-mailadres verplicht" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "Vereis gebruiker om e-mailadres te registreren bij aanmelding" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "SSO-gebruikers automatisch invullen" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "Gebruikersdetails van SSO-accountgegevens automatisch invullen" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "E-mail twee keer" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "Bij inschrijving gebruikers twee keer om hun e-mail vragen" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Wachtwoord tweemaal" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "Laat gebruikers twee keer om hun wachtwoord vragen tijdens het aanmelden" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "Toegestane domeinen" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Inschrijven beperken tot bepaalde domeinen (komma-gescheiden, beginnend met @)" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "Groep bij aanmelding" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Groep waaraan nieuwe gebruikers zijn toegewezen op registratie. Als SSO-groepssynchronisatie is ingeschakeld, is deze groep alleen ingesteld als er geen groep vanuit de IdP kan worden toegewezen." -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "MFA afdwingen" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "Gebruikers moeten multifactor-beveiliging gebruiken." -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "Het inschakelen van deze instelling zal ervoor zorgen dat alle gebruikers multifactor authenticatie instellen. Alle sessies worden onmiddellijk verbroken." -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "Controleer plugins bij het opstarten" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Controleer of alle plug-ins zijn geïnstalleerd bij het opstarten - inschakelen in container-omgevingen" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "Controleren op plug-in updates" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "Schakel periodieke controles voor updates voor geïnstalleerde plug-ins in" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "Activeer URL-integratie" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "Plugins toestaan om URL-routes toe te voegen" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "Activeer navigatie integratie" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "Plugins toestaan om te integreren in navigatie" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "Activeer app integratie" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "Activeer plug-ins om apps toe te voegen" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "Activeer planning integratie" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "Activeer plugin om periodiek taken uit te voeren" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "Activeer evenement integratie" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "Activeer plugin om op interne evenementen te reageren" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "Interface integratie activeren" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "Plug-ins inschakelen om te integreren in de gebruikersinterface" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "E-mail integratie inschakelen" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Schakel plug-ins in om uitgaande / inkomende mails te verwerken" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "Activeer project codes" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "Schakel projectcodes in voor het bijhouden van projecten" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "Voorraadcontrole inschakelen" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "Functionaliteit voor het opnemen van historische voorraadniveaus en -waarde inschakelen" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "Externe locaties uitsluiten" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Voorraadartikelen op externe locaties uitsluiten van voorraadberekeningen" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "Automatische Voorraadcontrole Periode" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "Aantal dagen tussen automatische voorraadgegevens opnemen" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "Oude voorraadgegevens verwijderen" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "Voorraadgegevens verwijderen die ouder zijn dan het opgegeven aantal dagen" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "Interval Voorraadgegevens verwijderen" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "Voorraadgegevens zal worden verwijderd na het opgegeven aantal dagen" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" -msgstr "" +msgstr "Oude voorraadgegevens verwijderen" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "Inverval voor verwijderen van voorraadtracking" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "Gebruikers volledige namen weergeven" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "Laat gebruikers volledige namen zien in plaats van gebruikersnamen" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "Gebruikersprofielen tonen" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "Toon gebruikersprofielen op hun profielpagina" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "Inschakelen van teststation data" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "Schakel teststation gegevensverzameling in voor testresultaten" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "Machine Ping inschakelen" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Schakel periodieke ping taak van geregistreerde machines in om hun status te controleren" @@ -3956,33 +3988,33 @@ msgstr "Onderdeel is actief" msgid "Manufacturer is Active" msgstr "Fabrikant is actief" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Leveranciersonderdelen is actief" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "Primaire leverancierdeel" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Intern onderdeel is actief" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Leverancier is actief" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Fabrikant" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Bedrijf" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "Heeft voorraad" @@ -4071,7 +4103,7 @@ msgstr "Btw-nr" msgid "Company Tax ID" msgstr "BTW-nummer van bedrijf" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Adres" @@ -4163,7 +4195,7 @@ msgstr "Verzend notities voor intern gebruik" msgid "Link to address information (external)" msgstr "Link naar adres gegevens (extern)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Fabrikant onderdeel" @@ -4181,12 +4213,12 @@ msgstr "Onderdeel selecteren" msgid "Select manufacturer" msgstr "Fabrikant selecteren" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "Fabrikant artikel nummer" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Fabrikant artikel nummer (MPN)" @@ -4210,8 +4242,8 @@ msgstr "Hoeveelheid moet groter zijn dan nul" msgid "Linked manufacturer part must reference the same base part" msgstr "Gekoppeld fabrikant onderdeel moet verwijzen naar hetzelfde basis onderdeel" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Leverancier" msgid "Select supplier" msgstr "Leverancier selecteren" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Voorraad beheers eenheid voor leveranciers" @@ -4258,8 +4290,8 @@ msgstr "basisprijs" msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimale kosten (bijv. voorraadkosten)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Verpakking" @@ -4307,14 +4339,18 @@ msgstr "Standaardvaluta die gebruikt wordt voor deze leverancier" msgid "Company Name" msgstr "Bedrijfsnaam" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Op voorraad" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "Prijsverschillen" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Fout opgetreden tijdens data export" @@ -4419,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "Bestaande database-identifier voor het record" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "De kolom is al toegewezen aan een database veld" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Het veld is al toegewezen aan een data-kolom" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "Kolom toewijzing moet worden gekoppeld aan een geldige importsessie" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "Kolom bestaat niet in het gegevensbestand" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "Veld bestaat niet in het doel model" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Geselecteerde veld is alleen lezen" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Importeer sessie" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Veld" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Kolom" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Rij index" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Oorspronkelijke rij gegevens" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Fouten" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Geldig" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "ID is vereist voor het bijwerken van bestaande records." -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "Geen record gevonden met het opgegeven ID" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "Ongeldig ID formaat opgegeven" @@ -4579,7 +4615,7 @@ msgstr "Aantal afdrukken voor elk label" msgid "Connected" msgstr "Verbonden" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Onbekend" @@ -4711,7 +4747,7 @@ msgstr "Maximale waarde voor voortgangsttype, vereist als type=progress" msgid "Order Reference" msgstr "Order Referentie" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Uitmuntend" @@ -4767,11 +4803,11 @@ msgstr "Bijgewerkt na" msgid "Has Pricing" msgstr "Heeft prijsstelling" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Voltooid voor" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Voltooid na" @@ -4779,17 +4815,17 @@ msgstr "Voltooid na" msgid "External Build Order" msgstr "Externe Bouw Opdracht" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "Bestellen" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Bestelling voltooid" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Intern onderdeel" @@ -4797,27 +4833,27 @@ msgstr "Intern onderdeel" msgid "Order Pending" msgstr "Bestelling in behandeling" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Voltooid" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Heeft verzending" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Inkooporder" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "Inkooporder" msgid "Sales Order" msgstr "Verkooporder" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "Adres komt niet overeen met het geselecteerde bedrijf" msgid "Order description (optional)" msgstr "Bestelling beschrijving (optioneel)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "Selecteer projectcode voor deze bestelling" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "Link naar externe pagina" @@ -4886,7 +4922,7 @@ msgstr "Start datum" msgid "Scheduled start date for this order" msgstr "Geplande startdatum voor deze bestelling" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Streefdatum" @@ -4919,413 +4955,421 @@ msgstr "Contactpunt voor deze volgorde" msgid "Company address for this order" msgstr "Bedrijf adres voor deze bestelling" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "Orderreferentie" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "Inkooporder status" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "Bedrijf waar de artikelen van worden besteld" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "Leveranciersreferentie" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "Order referentiecode van leverancier" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "ontvangen door" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "Order voltooid op datum" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "Bestemming" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "Bestemming voor ontvangen items" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "Onderdeelleverancier moet overeenkomen met de Inkooporderleverancier" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "Artikelregel komt niet overeen met inkooporder" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "Regelitem mist een gekoppeld deel" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "Hoeveelheid moet een positief getal zijn" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Klant" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "Bedrijf waaraan de artikelen worden verkocht" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "Verkooporder status" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "Klantreferentie " -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "Klant order referentiecode" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "Verzenddatum" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "verzonden door" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "Bestelling is al afgerond" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "Order is al geannuleerd" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "Alleen een open bestelling kan als voltooid worden gemarkeerd" -#: order/models.py:1450 +#: order/models.py:1463 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:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Order kan niet worden voltooid omdat er onvolledige artikelen aanwezig zijn" -#: order/models.py:1464 +#: order/models.py:1477 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:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "De bestelling is vergrendeld en kan niet worden gewijzigd" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "Hoeveelheid artikelen" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1822 msgid "Line item reference" msgstr "Artikelregel referentie" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "Artikel notities" -#: order/models.py:1822 +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Doeldatum voor dit regelitem (laat leeg om de doeldatum van de bestelling te gebruiken)" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "Regelomschrijving (optioneel)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "Additionele context voor deze regel" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "Stukprijs" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "Inkooporder regel item" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "Leveranciersonderdeel moet overeenkomen met leverancier" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "Bouw bestelling moet worden gemarkeerd als extern" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "Bestellingen kunnen alleen aan assemblageonderdelen worden gekoppeld" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "De bouw van het order deel moet overeenkomen met regel onderdeel" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "Leveranciersonderdeel" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "Ontvangen" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "Aantal ontvangen artikelen" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Inkoopprijs" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "Aankoopprijs per stuk" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "Externe Build Order moet aan deze regel voldoen" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "Extra regel inkooporder" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "Verkooporder regel item" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "Alleen verkoopbare onderdelen kunnen aan een verkooporder worden toegewezen" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Verkoopprijs" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "Prijs per stuk" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Verzonden" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "Verzonden hoeveelheid" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "Verzending van verkooporder" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "Verzendadres moet overeenkomen met de klant" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "Verzendadres voor deze zending" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "Datum van verzending" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "Leveringsdatum" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "Datum van levering van zending" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "Gecontroleerd door" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "Gebruiker die deze zending gecontroleerd heeft" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Zending" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "Zendingsnummer" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "Volgnummer" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "Zending volginformatie" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "Factuurnummer" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "Referentienummer voor bijbehorende factuur" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "Verzending is al verzonden" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "Zending heeft geen toegewezen voorraadartikelen" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "Verzending moet worden gecontroleerd voordat deze kan worden voltooid" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "Verkooporder extra regel" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "Toewijzing verkooporder" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "Voorraadartikel is niet toegewezen" -#: order/models.py:2548 +#: order/models.py:2577 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:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "Kan voorraad niet toewijzen aan een regel zonder onderdeel" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Toewijzingshoeveelheid kan niet hoger zijn dan de voorraadhoeveelheid" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "Toewijzing hoeveelheid moet groter zijn dan nul" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerd voorraadartikel" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "Verkooporder komt niet overeen met zending" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Verzending komt niet overeen met verkooporder" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Regel" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "Verzendreferentie verkooporder" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "Artikel" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "Selecteer voorraadartikel om toe te wijzen" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "Voer voorraadtoewijzingshoeveelheid in" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "Retour order referentie" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "Bedrijf van waaruit items worden teruggestuurd" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "Retour bestelling status" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "Retourneer bestelregel item" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "Voorraad item moet worden opgegeven" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "Retour hoeveelheid overschrijdt voorraad hoeveelheid" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "Het retour aantal moet groter zijn dan nul" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "Ongeldige hoeveelheid voor geserialiseerde voorraad" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "Selecteer te retourneren product van de klant" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "Ontvangst datum" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "De datum waarop dit retour item is ontvangen" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "Resultaat" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "Resultaat van deze regel item" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "Kosten geassocieerd met teruggave of reparatie voor deze regel item" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "Retourneren extra regel" @@ -5353,7 +5397,7 @@ msgstr "Extra regels kopiëren" msgid "Copy extra line items from the original order" msgstr "Extra regelitems van de oorspronkelijke bestelling kopiëren" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Parameters kopiëren" @@ -5372,217 +5416,217 @@ msgstr "Artikelen" msgid "Completed Lines" msgstr "Afgeronde regel items" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Artikel dupliceren" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Specificeer opties voor het dupliceren van deze bestelling" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "Ongeldige order ID" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Leveranciers Naam" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Order kan niet worden geannuleerd" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Toestaan order te sluiten met onvolledige regelitems" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Bestelling heeft onvolledige regelitems" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Order is niet open" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Automatisch prijzen" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Koopprijs automatisch berekenen gebaseerd op leveranciers \n" " onderdelen gegevens" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Valuta Inkoopprijs" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Items samenvoegen" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Items met hetzelfde onderdeel, bestemming en doeldatum samenvoegen in één regelitem" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Intern Onderdeelnummer" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Interne naam onderdeel" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Leveranciersonderdeel moet worden gespecificeerd" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Inkooporder moet worden gespecificeerd" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "De leverancier moet overeenkomen met de inkooporder" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Inkooporder moet overeenkomen met de leverancier" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Artikel" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Selecteer bestemmingslocatie voor ontvangen artikelen" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Voer batch code in voor inkomende voorraad items" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Vervaldatum" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Voer vervaldatum in voor inkomende voorraad items" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Voer serienummers in voor inkomende voorraadartikelen" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Overschrijf verpakkingsinformatie voor binnenkomende voorraad" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Extra opmerking voor inkomende voorraad items" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Streepjescode" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Gescande streepjescode" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Streepjescode is al in gebruik" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Artikelen moeten worden opgegeven" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Bestemmingslocatie moet worden opgegeven" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Geleverde streepjescodewaarden moeten uniek zijn" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Verzendingen" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Voltooide Verzendingen" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "Toegewezen lijnen" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Valuta verkoopprijs" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Toegewezen items" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Geen verzenddetails opgegeven" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Artikelregel is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Hoeveelheid moet positief zijn" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Voer serienummers in om toe te wijzen" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Verzending is al verzonden" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Zending is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Geen overeenkomst gevonden voor de volgende serienummers" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "De volgende serienummers zijn niet beschikbaar" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Retourneer regel item" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Artikelregel komt niet overeen met inkooporder" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Regel item is al ontvangen" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Artikelen kunnen alleen worden ontvangen tegen lopende bestellingen" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Hoeveelheid te retourneren" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Lijn prijs valuta" @@ -5798,7 +5842,7 @@ msgstr "Standaard trefwoorden voor delen in deze categorie" msgid "Icon" msgstr "Pictogram" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Pictogram (optioneel)" @@ -5819,7 +5863,7 @@ msgstr "Standaard waarde" msgid "Default Parameter Value" msgstr "Standaard Parameter Waarde" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Onderdelen" @@ -5934,7 +5978,7 @@ msgstr "Deel sleutelwoorden om de zichtbaarheid van de zoekresultaten te verbete msgid "Part category" msgstr "Onderdeel Categorie" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" @@ -5943,7 +5987,7 @@ msgstr "IPN" msgid "Part revision or version number" msgstr "Onderdeel revisie of versienummer" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Revisie" @@ -5967,7 +6011,7 @@ msgstr "Standaard verval datum" msgid "Expiry time (in days) for stock items of this part" msgstr "Verlooptijd (in dagen) voor voorraadartikelen van dit deel" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimum voorraad" @@ -6448,355 +6492,355 @@ msgstr "Onderdeel relatie kan niet worden gecreëerd tussen een deel en zichzelf msgid "Duplicate relationship already exists" msgstr "Dubbele relatie bestaat al" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Bovenliggende categorie" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Bovenliggende onderdeel categorie" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Subcategorieën" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Resultaten" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Aantal resultaten opgenomen ten opzichte van deze template" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Inkooporder voor dit voorraadartikel" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "Bestand is geen afbeelding" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Oorspronkelijk onderdeel" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Selecteer origineel onderdeel om te dupliceren" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Afbeelding kopiëren" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Afbeelding kopiëren van het oorspronkelijke onderdeel" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Copy BOM" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Kopieer materiaal van het oorspronkelijke deel" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Parameter data kopiëren van het originele onderdeel" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Notities kopiëren" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Kopieer notities van het originele deel" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "Tests kopiëren" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "Test sjablonen kopiëren van het originele deel" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Eerste voorraad hoeveelheid" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Specificeer de initiële voorraad hoeveelheid voor dit onderdeel. Als het aantal nul is, wordt er geen voorraad toegevoegd." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Eerste voorraad locatie" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Specificeer locatie van de eerste voorraad voor dit onderdeel" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Selecteer leverancier (of laat leeg om niets in te vullen)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Selecteer fabrikant (of laat leeg om niets in te vullen)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Fabrikant artikel nummer" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "Geselecteerde onderneming is geen geldige leverancier" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "Geselecteerde bedrijf is geen geldige fabrikant" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Fabrikant deel dat overeenkomt met deze MPN bestaat al" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Leveranciersdeel dat overeenkomt met deze SKU bestaat al" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Categorie naam" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Bouwen" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "Hoeveelheid van dit deel dat momenteel in productie is" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Er zal een onuitputtelijke hoeveelheid van dit deel worden gebouwd" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Voorraadartikelen" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Revisies" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Totale Voorraad" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Niet toegewezen voorraad" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Variant voorraad" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Dupliceer onderdeel" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Kopieer eerste gegevens uit een ander onderdeel" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Eerste voorraad" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Maak onderdeel met eerste voorraad" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Leveranciersgegevens" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Aanvankelijke leveranciersinformatie voor dit deel toevoegen" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Categorie parameters kopiëren" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Parameter sjablonen kopiëren uit geselecteerde onderdeel categorie" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Bestaande afbeelding" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Bestandsnaam van een bestaande onderdeel afbeelding" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Afbeeldingsbestand bestaat niet" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Valideer de gehele materiaalbon" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Kan bouwen" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "Vereist voor bouworders" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "Toegewezen aan bouwen van orders" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "Vereist voor verkooporders" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "Toegewezen aan verkooporders" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "IPN onderdeel" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "Onderdeel omschrijving" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "Rapport Maken" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Minimale prijs" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Overschrijf berekende waarde voor minimale prijs" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Minimale prijs valuta" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Maximale prijs" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Overschrijf de berekende waarde voor de maximale prijs" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Maximale prijs valuta" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Bijwerken" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Prijzen voor dit onderdeel bijwerken" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Kan niet converteren van de verstrekte valuta naar {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Minimumprijs mag niet hoger zijn dan de maximale prijs" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Maximale prijs mag niet lager zijn dan de minimale prijs" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Selecteer de bovenliggende assemblage" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Selecteer het onderdeel" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Selecteer onderdeel om BOM van te kopiëren" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Bestaande gegevens verwijderen" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Verwijder bestaande BOM items voor het kopiëren" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Inclusief overgenomen" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Inclusief stuklijst BOM items die worden overgenomen van getemplated onderdelen" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Ongeldige regels overslaan" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Schakel deze optie in om ongeldige rijen over te slaan" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Verwijder vervangend deel" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopieer vervangende onderdelen bij dubbele stuklijst BOM items" @@ -7517,7 +7561,7 @@ msgstr "Rand" msgid "Print a border around each label" msgstr "Print een rand rond elk label" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "Liggend" @@ -7597,64 +7641,77 @@ msgstr "Biedt ondersteuning voor het scannen van TME barcodes " msgid "The Supplier which acts as 'TME'" msgstr "De leverancier die als \"TME” optreedt " -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Alleen medewerker gebruikers kunnen plug-ins beheren" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "Plug-in installatie is uitgeschakeld" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Plug-in succesvol geïnstalleerd" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Plug-in geïnstalleerd in {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "De plug-in is niet gevonden in het register" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "De plug-in is geen verpakte plug-in" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Naam van plug-in pakket niet gevonden" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Alleen medewerker gebruikers kunnen plug-ins beheren" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "Verwijderen van plug-in is uitgeschakeld" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "De plug-in kan niet worden verwijderd omdat deze momenteel actief is" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "De plug-in kan niet gedeïnstalleerd worden omdat deze verplicht is" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "De plug-in kan niet worden gedeïnstalleerd omdat het een voorbeeld plug-in is" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "De plug-in kan niet worden gedeïnstalleerd omdat het een ingebouwde plug-in is" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "De plug-in is niet geïnstalleerd" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Plug-in installatie niet gevonden" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Deïnstalleerde plug-in succesvol" @@ -7901,55 +7958,55 @@ msgstr "Installatie niet bevestigd" msgid "Either packagename or URL must be provided" msgstr "Ofwel de pakketnaam van de URL moet worden opgegeven" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Volledige herladen" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Herlaad het plug-in register volledig" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Herladen forceren" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Forceer herladen van het plug-in register, zelfs als het al geladen is" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Plug-ins ophalen" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Verzamel plug-ins en voeg ze toe aan het register" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Activeer plug-in" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Deze plug-in activeren" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "Verplichte plug-in kan niet worden gedeactiveerd" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Configuratie verwijderen" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Verwijder de plug-in configuratie uit de database" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "De gebruiker waarvoor deze instelling van toepassing is" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "Items" @@ -7965,7 +8022,7 @@ msgstr "Plug-in ondersteunt geen label printen" msgid "Invalid label dimensions" msgstr "Ongeldige label afmetingen" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "Geen geldige items aan de template verstrekt" @@ -7989,152 +8046,156 @@ msgstr "Brief" msgid "Template file with this name already exists" msgstr "Sjabloonbestand met deze naam bestaat al" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "Template naam" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "Template beschrijving" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "Revisie nummer (auto verhogen)" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "Bevestig aan het model bij afdrukken" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "Sla rapport output op als bijlage ten opzichte van gekoppelde model instantie bij afdrukken" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "Bestandsnaam Patroon" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "Patroon voor het genereren van bestandsnamen" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "Template is ingeschakeld" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "Doel type model voor sjabloon" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Filters" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "Sjabloon zoekfilters (door komma's gescheiden lijst van sleutel=waarde paren)" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "Sjabloon bestand" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "Standaard paginagrootte voor PDF rapport" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "Rapportage weergeven in liggende stand" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "Samenvoegen" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "Geef een enkel rapport tegen geselecteerde items" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "Rapport gegenereerd door template {self.name}" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "Sjabloon syntaxis fout" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "Fout bij het renderen rapport" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "Fout bij genereren rapport" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "Fout bij samenvoegen rapport uitvoer" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Breedte [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "Label breedte, gespecificeerd in mm" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Hoogte [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "Label hoogte, gespecificeerd in mm" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "Fout afdrukken van labels" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "Tekstfragment" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "Rapporteer snippet bestand" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "Snippet bestandsbeschrijving" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "Asset" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "Rapporteer asset bestand" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "Beschrijving asset bestand" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "Selecteer rapport template" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "Lijst van primaire productsleutels op te nemen in het verslag" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "Selecteer label sjabloon" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "Plug-in printen" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "Selecteer de plug-in voor het afdrukken van labels" @@ -8232,7 +8293,7 @@ msgstr "Rapport voorraadcontrole" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Geïnstalleerde items" @@ -8289,7 +8350,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "part_image tag vereist een onderdeel instantie" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "bedrijf_imagetag vereist een bedrijfsinstantie" @@ -8305,7 +8366,7 @@ msgstr "Filter op topniveau locaties" msgid "Include sub-locations in filtered results" msgstr "Inclusief sublocaties in gefilterde resultaten" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Bovenliggende locatie" @@ -8389,7 +8450,7 @@ msgstr "Vervaldatum voor" msgid "Expiry date after" msgstr "Vervaldatum na" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Verouderd" @@ -8523,7 +8584,7 @@ msgstr "Onderdeel moet gespecificeerd worden" msgid "Stock items cannot be located into structural stock locations!" msgstr "Voorraaditems kunnen niet worden geplaatst in structurele voorraadlocaties!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Voorraadartikel kan niet worden aangemaakt voor virtuele onderdelen" @@ -8568,7 +8629,7 @@ msgstr "Selecteer een leveranciersdeel voor dit voorraadartikel" msgid "Where is this stock item located?" msgstr "Waar bevindt zich dit voorraaditem?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Het verpakken van dit voorraaditem is opgeslagen in" @@ -8584,7 +8645,7 @@ msgstr "Is dit item geïnstalleerd in een ander item?" msgid "Serial number for this item" msgstr "Serienummer van dit item" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Batch code voor dit voorraaditem" @@ -8697,7 +8758,7 @@ msgstr "Voorraad item is momenteel in productie" msgid "Serialized stock cannot be merged" msgstr "Geserialiseerde voorraad kan niet worden samengevoegd" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Dupliceer voorraadartikelen" @@ -8821,7 +8882,7 @@ msgstr "Selecteer onderdeel voor het genereren van het serienummer voor" msgid "Quantity of serial numbers to generate" msgstr "Aantal serienummers om te genereren" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "Test template voor dit resultaat" @@ -8845,222 +8906,222 @@ msgstr "Bovenliggend Item" msgid "Parent stock item" msgstr "Bovenliggende voorraad item" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Gebruik pakketgrootte bij het toevoegen: de hoeveelheid gedefinieerd is het aantal pakketten" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "Gebruik pakketgrootte" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Voer serienummers voor nieuwe items in" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Leverancier artikelnummer" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Verlopen" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Onderliggende items" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "Items volgen" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "Inkoopprijs van dit voorraadartikel, per eenheid of pakket" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Aantal voorraaditems om serienummers voor te maken" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "Geen voorraad item opgegeven" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Hoeveelheid mag niet hoger zijn dan de beschikbare voorraad ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Locatie van bestemming" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Serienummers kunnen niet worden toegewezen aan dit deel" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Serienummers bestaan al" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Selecteer voorraaditem om te installeren" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Te installeren hoeveelheid" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Voer de te installeren hoeveelheid items in" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Transactienotitie toevoegen (optioneel)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "Te installeren hoeveelheid moet minimaal 1 zijn" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Voorraadartikel is niet beschikbaar" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Het geselecteerde deel zit niet in de materialen lijst" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "De te installeren hoeveelheid mag niet groter zijn dan de beschikbare hoeveelheid" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Bestemmingslocatie voor verwijderd item" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Selecteer onderdeel om voorraaditem om te zetten in" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "Het geselecteerde deel is geen geldige optie voor de omzetting" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Kan voorraadartikel niet converteren met toegewezen leverancier deel" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Voorraad status code" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Selecteer voorraadartikelen om status te wijzigen" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Geen voorraaditems geselecteerd" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Sublocaties" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Bovenliggende voorraad locatie" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Onderdeel moet verkoopbaar zijn" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Artikel is toegewezen aan een verkooporder" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Artikel is toegewezen aan een productieorder" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Klant om voorraadartikelen toe te wijzen" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "Geselecteerde bedrijf is geen klant" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Voorraad toewijzing notities" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Een lijst met voorraad artikelen moet worden opgegeven" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Voorraad samenvoegen notities" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Niet overeen komende leveranciers toestaan" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Toestaan dat voorraadartikelen met verschillende leveranciers onderdelen worden samengevoegd" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Sta onjuiste status toe" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Toestaan dat voorraadartikelen met verschillende statuscodes worden samengevoegd" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Er moeten ten minste twee voorraadartikelen worden opgegeven" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Geen wijziging" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Voorraaditem primaire sleutel waarde" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "Voorraad artikel is niet op voorraad" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "Voorraad artikel is al in voorraad" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "Hoeveelheid mag niet negatief zijn" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Voorraad transactie notities" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "Samenvoegen in bestaande voorraad" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "Voeg indien mogelijk geretourneerde items samen in bestaande voorraad" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "Volgend serienummer" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "Vorig serienummer" @@ -9542,83 +9603,99 @@ msgstr "Verkooporders" msgid "Return Orders" msgstr "Retour orders" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Gebruikersnaam" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Voornaam :" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Voornaam van de gebruiker" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Achternaam" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Achternaam van de gebruiker" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "E-mailadres van de gebruiker" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Medewerkers" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Heeft deze gebruiker medewerker machtigingen" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Administrator " -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Is deze gebruiker een administrator " -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Is dit gebruikersaccount actief" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Enkel een supergebruiker kan dit veld aanpassen" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "Wachtwoord" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Wachtwoord voor de gebruiker" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "Overschrijf waarschuwing" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Overschrijf de waarschuwing over wachtwoord regels" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "U hebt geen toestemming om gebruikers aan te maken" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Je account is aangemaakt." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Gebruik de wachtwoordreset functie om in te loggen" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Welkom bij InvenTree" diff --git a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po index b5643eb9e0..0844cce8f3 100644 --- a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Language: no_NO\n" @@ -49,7 +49,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Brukeren har ikke rettigheter til å se denne modellen" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Kunne ikke konvertere {original} til {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Ugyldig mengde oppgitt" @@ -104,13 +104,13 @@ msgstr "Oppgi dato" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Notater" @@ -123,75 +123,91 @@ msgstr "Verdi '{name}' vises ikke i mønsterformat" msgid "Provided value does not match required pattern: " msgstr "Angitt verdi samsvarer ikke med påkrevd mønster: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Tom serienummerstreng" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Duplisert serienummer" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Gruppesekvens {group} overskrider tillatt antall ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Ingen serienummer funnet" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Fjern HTML-tagger fra denne verdien" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Tilkoblingsfeil" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Serveren svarte med ugyldig statuskode" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Det har oppstått et unntak" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Serveren svarte med ugyldig \"Content-Length\"-verdi" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Bildestørrelsen er for stor" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Bildenedlasting overskred maksimal størrelse" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Ekstern server returnerte tomt svar" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Angitt URL er ikke en gyldig bildefil" @@ -199,7 +215,7 @@ msgstr "Angitt URL er ikke en gyldig bildefil" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-post" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Ugyldig valg" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Navn" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Beskrivelse" msgid "Description (optional)" msgstr "Beskrivelse (valgfritt)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Sti" @@ -320,51 +336,51 @@ msgstr "En feil har blitt logget av serveren." msgid "Image" msgstr "Bilde" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Må være et gyldig tall" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Velg valuta ut fra tilgjengelige alternativer" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Ugyldig verdi" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Eksternt bilde" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URLtil ekstern bildefil" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Nedlasting av bilder fra ekstern URL er ikke aktivert" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "Kinesisk (forenklet)" msgid "Chinese (Traditional)" msgstr "Kinesisk (tradisjonell)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "Ugyldig fysisk enhet" msgid "Not a valid currency code" msgstr "Ikke en gyldig valutakode" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Ordrestatus" @@ -545,21 +561,21 @@ msgstr "Ordrestatus" msgid "Parent Build" msgstr "Overordnet produksjon" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -653,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Produksjonen må avbrytes før den kan slettes" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Forbruksvare" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Valgfritt" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Sammenstilling" @@ -671,32 +687,32 @@ msgstr "Sammenstilling" msgid "Tracked" msgstr "Spores" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Tildelt" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Tilgjengelig" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "I bestilling" @@ -704,26 +720,26 @@ msgstr "I bestilling" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Produksjonsordre" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Plassering" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "Produksjonsordre-referanse" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Salgsordrereferanse" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Kildeplassering" @@ -845,16 +861,16 @@ msgstr "Produksjonsstatus" msgid "Build status code" msgstr "Produksjonsstatuskode" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Batchkode" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Batchkode for denne produksjonsartikkelen" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Opprettelsesdato" @@ -875,7 +891,7 @@ msgstr "Forventet sluttdato" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Måldato for ferdigstillelse. Produksjonen vil være forfalt etter denne datoen." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Fullført dato" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Produksjonsordrens prioritet" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Prosjektkode" @@ -948,7 +964,7 @@ msgstr "Produksjonsordre {build} er fullført" msgid "A build order has been completed" msgstr "En produksjonsordre er fullført" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Serienumre må angis for sporbare deler" @@ -964,23 +980,23 @@ msgstr "Produksjonsartikkelen er allerede fullført" msgid "Build output does not match Build Order" msgstr "Produksjonsartikkelen samsvarer ikke med produksjonsordren" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Mengden må være større enn null" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Kvantitet kan ikke være større enn utgangsantallet" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Produksjonsartikkel {serial} har ikke bestått alle påkrevde tester" @@ -1001,10 +1017,10 @@ msgstr "Produksjonsartikkel" msgid "Build object" msgstr "Produksjonsobjekt" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Produksjonsobjekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "Mengden må være 1 for serialisert lagervare" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Tildelt antall ({q}) kan ikke overstige tilgjengelig lagerbeholdning ({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "Lagervaren er overtildelt" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Lagervare" @@ -1083,378 +1099,378 @@ msgstr "Lagervare for montering" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Delnavn" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Produksjonsartikkel" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Produksjonsartikkel samsvarer ikke med overordnet produksjon" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Resultatdel samsvarer ikke med produksjonsordredel" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Denne produksjonsartikkelen er allerede fullført" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Denne produksjonsartikkelen er ikke fullt tildelt" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Angi antall for produksjonsartikkel" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Heltallsverdi kreves for sporbare deler" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Heltallsverdi kreves, da stykklisten inneholder sporbare deler" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Angi serienummer for produksjonsartikler" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Lagerplassering for produksjonsartikkel" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Automatisk tildeling av serienummer" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatisk tildeling av nødvendige artikler med tilsvarende serienummer" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Følgende serienummer finnes allerede eller er ugyldige" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "En liste over produksjonsartikler må oppgis" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Lagerplassering for skrotede produksjonsartikler" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Forkast tildelinger" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Forkast tildelinger fra skrotede produksjonsartikler" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Grunn for skroting av produksjonsartikler" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Plassering for ferdige produksjonsartikler" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Godta ufullstendig tildeling" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Fullfør artikler dersom lagerbeholdning ikke er fullt tildelt" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Bruk tildelt lagerbeholdning" -#: build/serializers.py:691 +#: build/serializers.py:698 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:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Fjern ufullstendige artikler" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Slett alle produksjonsartikler som ikke er fullført" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Ikke tillatt" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Godta som brukt av denne produksjonsordren" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Fjern tildeling før produksjonsordren fullføres" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Overtildelt lagerbeholdning" -#: build/serializers.py:757 +#: build/serializers.py:764 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:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Noen lagervarer har blitt overtildelt" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Godta ikke tildelt" -#: build/serializers.py:775 +#: build/serializers.py:782 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:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Nøvendig lagerbeholdning er ikke fullt tildelt" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Godta uferdig" -#: build/serializers.py:793 +#: build/serializers.py:800 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:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Nødvendig produksjonsmengde er ikke nådd" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Produksjonsordren har uferdige artikler" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Produksjonslinje" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Produksjonsartikkel" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Produksjonsartikkel må peke til samme produksjon" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Produksjonsartikkel" -#: build/serializers.py:926 +#: build/serializers.py:933 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:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Artikkelen må være på lager" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Tilgjengelig antall ({q}) overskredet" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Produksjonsartikkel må spesifiseres for tildeling av sporede deler" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Produksjonsartikkel kan ikke spesifiseres for tildeling av usporede deler" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Tildelingsartikler må oppgis" -#: build/serializers.py:1087 +#: build/serializers.py:1094 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:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Eksluderer plassering" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Ekskluder lagervarer fra denne valgte plasseringen" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Utskiftbar lagerbeholdning" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Lagervarer ved flere plasseringer kan brukes om hverandre" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Erstatning-lagerbeholdning" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Tilatt tildelling av erstatningsdeler" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Valgfrie artikler" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Tildel valgfrie BOM-artikler til produksjonsordre" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "BOM-referanse" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Leverandørdel" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Tildelt antall" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Produksjonsreferanse" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Delkategorinavn" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Sporbar" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Nedarvet" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Tillat Varianter" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "BOM-artikkel" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "I produksjon" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Ekstern lagerbeholdning" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Tilgjengelig lagerbeholdning" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Tilgjengelige erstatningsvarer" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Tilgjengelige variantvarer" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "Kansellert" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "Forfalt produksjonsordre" msgid "Build order {bo} is now overdue" msgstr "Produksjonsordre {bo} er nå forfalt" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "Er lenke" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "Er fil" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Brukeren har ikke tillatelse til å slette dette vedlegget" @@ -1534,11 +1550,11 @@ msgstr "Ingen gyldige valutakoder angitt" msgid "No plugin" msgstr "Ingen programtillegg" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Etikett for prosjektkode" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Oppdatert" @@ -1600,7 +1616,7 @@ msgstr "Nøkkelstreng må være unik" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Bruker" msgid "Price break quantity" msgstr "Antall for prisbrudd" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Pris" @@ -1633,10 +1649,10 @@ msgstr "Endepunktet hvor denne webhooken er mottatt" msgid "Name for this webhook" msgstr "Navn for webhooken" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiv" @@ -1660,11 +1676,11 @@ msgstr "Hemmelig" msgid "Shared secret for HMAC" msgstr "Delt hemmlighet for HMAC" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "Melding ID" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "Unik Id for denne meldingen" @@ -1714,7 +1730,7 @@ msgstr "Tittel" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Forfatter" msgid "Summary" msgstr "Sammendrag" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Les" @@ -1797,7 +1813,7 @@ msgstr "Fil mangler" msgid "Missing external link" msgstr "Mangler eksternlenke" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "Filstørrelse" msgid "File size in bytes" msgstr "Filstørrelse i byte" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Ugyldig modelltype spesifisert for vedlegg" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Verdi" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Opprettet" @@ -1998,334 +2014,334 @@ msgstr "Sist oppdatert" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "Parametermal" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "Sjekkboksparameter kan ikke ha enheter" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "Sjekkboksparameter kan ikke ha valg" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "Valg må være unike" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "Navn på parametermal må være unikt" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "Parameternavn" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "Enheter" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "Fysisk enheter for denne parameteren" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "Parameterbeskrivelse" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "Sjekkboks" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "Er dette parameteret en sjekkboks?" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "Valg" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "Gyldige valg for denne parameteren (kommaseparert)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Aktivert" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "Ugyldig valg for parameterverdi" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Mal" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "Parameterverdi" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Notat" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Valgfritt notatfelt" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "Kontekst" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Resultat" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Nøkkel" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Kjører" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Ventende oppgaver" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Planlagte oppgaver" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Mislykkede oppgaver" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Oppgave-ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Unik oppgave-ID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Lås" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Låsetidspunkt" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Oppgavenavn" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funksjon" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Funksjonsnavn" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumenter" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Oppgaveargumenter" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Nøkkelordargumenter" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Nøkkelordargumenter for oppgave" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Filnavn" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Modelltype" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Brukeren har ikke tillatelse tillatelse å opprette eller endre vedlegg for denne modellen" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Ingen gruppe" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "Nettstedets URL er låst av konfigurasjon" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Omstart kreves" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "En innstilling har blitt endret som krever en omstart av serveren" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Ventende migrasjoner" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Antall ventende databasemigreringer" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Navn på serverinstans" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Strengbeskrivelse for serverinstansen" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Bruk instansnavn" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Bruk instansnavnet på tittellinjen" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Begrens visning av 'om'" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Vis `about`-modal kun til superbrukere" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Firmanavn" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "Internt firmanavn" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "Base-URL" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "Base-URL for serverinstans" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Standardvaluta" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "Velg grunnvalutaen for prisberegninger" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "Støttede valutaer" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "Liste over støttede valutakoder" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "Oppdateringsintervall for valuta" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Hvor ofte valutakurser skal oppdateres (sett til null for å deaktiverere)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "dager" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "Valutaoppdaterings-plugin" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "Valgt valutaoppdaterings-plugin" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "Last ned fra URL" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "Tillat nedlastning av eksterne bilder og filer fra ekstern URL" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "Nedlastingsgrense" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "Maksimal tillatt nedlastingsstørrelse for eksternt bilde" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "User-Agent brukt for å laste ned fra URL" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Tillat overstyring av User-Agent brukt for å laste ned bilder og filer fra eksterne URLer (lå stå blank for standard)" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "Streng URL-validering" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "Krev skjemaspesifikasjon ved validering av URLer" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "Intervall for oppdateringssjekk" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "Tidsintervall for å se etter oppdateringer(sett til null for å skru av)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Automatisk sikkerhetskopiering" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "Aktiver automatisk sikkerhetskopiering av database og mediafiler" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "Automatisk sikkerhetskopieringsintervall" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "Angi antall dager mellom automatiske sikkerhetskopieringshendelser" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "Slettingsintervall for oppgaver" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "Bakgrunnsoppgaveresultater vil bli slettet etter antall angitte dager" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "Slettingsintervall for feillogg" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "Feilloggene vil bli slettet etter et angitt antall dager" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "Slettingsintervall for varsler" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "Brukervarsler slettes etter angitt antall dager" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Strekkodestøtte" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "Aktiver støtte for strekkodeleser i webgrensesnittet" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "Innlesingsforsinkelse for strekkode" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "Tidsforsinkelse for behandling av strekkode" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "Støtte for strekkodewebkamera" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "Tillat strekkodelesning via webkamera i nettleseren" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "Vis Strekkodedata" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "Vis strekkodedata som tekst" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "Delrevisjoner" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "Aktiver revisjonsfeltet for Del" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "IPN regex" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "Regulært uttrykksmønster for matching av internt delnummer" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "Tilat duplikat av internt delnummer" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "Tillat flere deler å dele samme interne delnummer" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "Tillat redigering av internt delnummer" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "Tillat endring av IPN-verdien mens du redigerer en del" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "Kopier BOM-data fra del" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopier BOM-data som standard når du dupliserer en del" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "Kopier parameterdata fra del" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "Kopier parameterdata som standard ved duplisering av en del" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "Kopier testdata fra del" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "Kopier testdata som standard ved duplisering av en del" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "Kopier designmaler for kategoriparametere" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "Kopier parametermaler for kategori ved oppretting av en del" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "Deler er maler som standard" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "Deler kan settes sammen fra andre komponenter som standard" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "Deler kan bli brukt som underkomponenter som standard" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Kjøpbar" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "Deler er kjøpbare som standard" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Salgbar" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "Deler er salgbare som standard" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "Deler er sporbare som standard" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Virtuelle" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "Deler er virtuelle som standard" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "Vis relaterte deler" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "Vis relaterte deler i en del" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "Innledende lagerbeholdningsdata" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "Tillat oppretting av innledende lagerbeholdning når en ny del opprettes" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "Innledende leverandørdata" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Tillat oppretting av innledende leverandørdata når en ny del opprettes" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "Visningsformat for delnavn" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "Format for å vise delnavnet" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "Standardikon for delkategorier" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "Standardikon for delkategorier (tomt betyr ingen ikon)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "Minimum antall desimalplasser for priser" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Minimum antall desimalplasser som skal vises når man gjengir prisdata" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "Maksimalt antall desimalplasser for priser" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maksimalt antall desimalplasser som skal vises når man gjengir prisdata" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "Bruk leverandørpriser" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Inkluder leverandørprisbrudd i beregninger av totalpriser" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "Innkjøpshistorikkoverstyring" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historiske innkjøpspriser overstyrer leverandørprisnivåer" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "Bruk lagervarepriser" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Bruk priser fra manuelt innlagte lagervarer for prisberegninger" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "Lagervare prisalder" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Unnta lagervarer som er eldre enn dette antall dager fra prisberegninger" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "Bruk Variantpriser" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "Inkluder variantpriser i beregninger av totale priser" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "Kun aktive varianter" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "Bruk kun aktive variantdeler til beregning av variantprising" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "Intervall for rekalkulering av priser" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "Antall dager før delpriser blir automatisk oppdatert" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Interne Priser" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "Aktiver interne priser for deler" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "Intern prisoverstyring" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "Hvis tilgjengelig, overstyrer interne priser kalkulering av prisområde" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "Aktiver etikettutskrift" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "Aktiver utskrift av etiketter fra nettleseren" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "Etikettbilde-DPI" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI-oppløsning når når det genereres bildefiler for sending til utvidelser for etikettutskrift" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Aktiver Rapporter" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "Aktiver generering av rapporter" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "Feilsøkingsmodus" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "Generer rapporter i feilsøkingsmodus (HTML-output)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Sidestørrelse" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "Standard sidestørrelse for PDF-rapporter" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "Tving parameterenheter" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "Hvis det er angitt en enhet, skal parameterverdiene samsvare med de angitte enhetene" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "Globalt Unike Serienummer" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "Serienummer for lagervarer må være globalt unike" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "Slett oppbrukt lagerbeholdning" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "Batchkodemal" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "Mal for generering av standard batchkoder for lagervarer" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "Lagerbeholdning utløper" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "Aktiver funksjonalitet for utløp av lagerbeholdning" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "Selg utløpt lagerbeholdning" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "Tillat salg av utgått lagerbeholdning" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "Foreldet lagerbeholdning tidsintervall" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "Antall dager før lagervarer er ansett som foreldet før utløp" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "Produsér Utløpt Lagerbeholdning" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "Tillat produksjon med utløpt lagerbeholdning" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "Kontroll over eierskap av lagerbeholdning" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "Aktiver eierskap over lagerplasseringer og -varer" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "Lagerplassering standard ikon" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "Lagerplassering standard ikon (tomt betyr ingen ikon)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "Vis installerte lagervarer" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "Vis installerte lagervarer i lagertabeller" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "Produksjonsordre-referansemønster" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "Nødvendig mønster for å generere Produksjonsordre-referansefeltet" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "Aktiver returordrer" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "Aktiver returordrefunksjonalitet i brukergrensesnittet" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "Returordre-referansemønster" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "Rediger fullførte returordrer" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "Tillat redigering av returordrer etter de er fullført" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "Salgsordre-referansemønster" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "Påkrevd mønster for å generere salgsordrereferansefelt" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "Salgsordre standard fraktmetode" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "Aktiver opprettelse av standard forsendelse med salgsordrer" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "Rediger fullførte salgsordrer" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Tillat redigering av salgsordrer etter de har blitt sendt eller fullført" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "Referansemønster for innkjøpsordre" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "Obligatorisk mønster for generering av referansefelt for innkjøpsordre" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "Rediger fullførte innkjøpsordre" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Tillat redigering av innkjøpsordre etter at de har blitt sendt eller fullført" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "Autofullfør innkjøpsordrer" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Automatisk merk innkjøpsordre som fullført når alle ordrelinjer er mottatt" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Aktiver passord glemt" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "Ativer funskjon for glemt passord på innloggingssidene" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Aktiver registrering" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "Aktiver egenregistrerting for brukerer på påloggingssidene" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "Aktiver SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "Aktiver SSO på innloggingssidene" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "Aktiver SSO-registrering" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Aktiver selvregistrering via SSO for brukere på innloggingssiden" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "E-postadresse kreves" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "Krevt at brukere angir e-post ved registrering" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "Auto-utfyll SSO-brukere" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "Fyll automatisk ut brukeropplysninger fra SSO-kontodata" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "E-post to ganger" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "Spør brukeren om e-post to ganger ved registrering" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Passord to ganger" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "Spør brukeren om passord to ganger ved registrering" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "Tillatte domener" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Begrens registrering til bestemte domener (kommaseparert, begynner med @)" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "Gruppe ved registrering" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "Krev MFA" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "Brukere må bruke flerfaktorsikkerhet." -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "Sjekk utvidelser ved oppstart" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Sjekk at alle utvidelser er installert ved oppstart - aktiver i containermiljøer" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "Aktiver URL-integrasjon" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "Tillat utvidelser å legge til URL-ruter" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "Aktiver navigasjonsintegrasjon" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "Tillat utvidelser å integrere mot navigasjon" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "Aktiver app-integrasjon" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "Tillat utvidelser å legge til apper" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "Aktiver tidsplanintegrasjon" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "Tillat utvidelser å kjøre planlagte oppgaver" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "Aktiver hendelsesintegrasjon" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "Tillat utvidelser å reagere på interne hendelser" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "Ekskluder eksterne plasseringer" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "Automatisk varetellingsperiode" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "Vis brukernes fulle navn" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "Vis brukernes fulle navn istedet for brukernavn" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "Delen er aktiv" msgid "Manufacturer is Active" msgstr "Leverandør er aktiv" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Leverandørdel er aktiv" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Intern del er aktiv" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Leverandør er aktiv" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Produsent" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Firma" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Adresse" @@ -4163,7 +4195,7 @@ msgstr "Fraktnotater for internt bruk" msgid "Link to address information (external)" msgstr "Lenke til adresseinformasjon (ekstern)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Produsentdeler" @@ -4181,12 +4213,12 @@ msgstr "Velg del" msgid "Select manufacturer" msgstr "Velg produsent" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "MPN" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Produsentens varenummer" @@ -4210,8 +4242,8 @@ msgstr "Pakkeenhet må være mer enn null" msgid "Linked manufacturer part must reference the same base part" msgstr "Den sammenkoblede produsentdelen må referere til samme basisdel" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Leverandør" msgid "Select supplier" msgstr "Velg leverandør" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Leverandørens lagerbeholdningsenhet" @@ -4258,8 +4290,8 @@ msgstr "grunnkostnad" msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimum betaling (f.eks. lageravgift)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Emballasje" @@ -4307,14 +4339,18 @@ msgstr "Standardvaluta brukt for denne leverandøren" msgid "Company Name" msgstr "Bedriftsnavn" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "På lager" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Gyldig" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Ukjent" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "Ordrereferanse" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "Ordre" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Intern del" @@ -4797,27 +4833,27 @@ msgstr "Intern del" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Fullført" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Innkjøpsordre" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "Innkjøpsordre" msgid "Sales Order" msgstr "Salgsordre" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Ordrebeskrivelse (valgfritt)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "Velg prosjektkode for denne ordren" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "Lenke til ekstern side" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Måldato" @@ -4919,413 +4955,421 @@ msgstr "Kontaktpunkt for denne ordren" msgid "Company address for this order" msgstr "Selskapsadresse for denne ordren" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "Ordrereferanse" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "Status for innkjøpsordre" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "Firma som varene blir bestilt fra" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "Leverandørreferanse" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "Leverandørens ordrereferanse" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "mottatt av" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "Dato ordre ble fullført" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "Destinasjon" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "Delleverandør må matche PO-leverandør" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "Linjeelementet samsvarer ikke med innkjøpsordre" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "Mengde må være positiv" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Kunde" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "Firma som varene selges til" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "Kundereferanse " -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "Kundens ordrereferanse" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "Forsendelsesdato" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "sendt av" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "Kun en åpen ordre kan merkes som fullført" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Bestillingen kan ikke fullføres da det finnes ufullstendige forsendelser" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 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:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "Antall" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1822 msgid "Line item reference" msgstr "Linjereferanse" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "Linjenotater" -#: order/models.py:1822 +#: order/models.py:1844 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:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "Linjeelementbeskrivelse (valgfritt)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "Ytterligere kontekst for denne linjen" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "Enhetspris" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "Delens leverandør må samsvare med leverandør" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "Leverandørdel" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "Mottatt" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "Antall enheter mottatt" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Innkjøpspris" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "Enhet-innkjøpspris" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "Kun salgbare deler kan tildeles en salgsordre" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Salgspris" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "Enhets-salgspris" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Sendt" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "Sendt antall" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "Dato for forsendelse" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "Leveringsdato" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "Dato for levering av forsendelse" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "Sjekket Av" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "Brukeren som sjekket forsendelsen" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Forsendelse" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "Forsendelsesnummer" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "Sporingsnummer" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "Sporingsinformasjon for forsendelse" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "Fakturanummer" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "Referansenummer for tilknyttet faktura" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "Forsendelsen er allerede sendt" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "Forsendelsen har ingen tildelte lagervarer" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "Lagervarer er ikke blitt tildelt" -#: order/models.py:2548 +#: order/models.py:2577 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:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "Kan ikke tildele lagerbeholdning til en linje uten en del" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Tildelingsantall kan ikke overstige tilgjengelig lagerbeholdning" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "Tildelingsantall må være større enn null" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Antall må være 1 for serialisert lagervare" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "Salgsordre samsvarer ikke med forsendelse" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Forsendelsen samsvarer ikke med salgsordre" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Linje" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "Forsendelsesreferanse for salgsordre" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "Artikkel" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "Velg lagervare å tildele" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "Angi lagertildelingsmengde" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "Returordre-referanse" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "Firmaet delen skal returneres fra" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "Returordrestatus" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "Velg artikkel som skal returneres fra kunde" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "Mottatt Dato" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "Utfall" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "Utfall for dette linjeelementet" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "Kostnad forbundet med retur eller reparasjon for dette linjeelementet" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Kopier parametere" @@ -5372,216 +5416,216 @@ msgstr "Linjeelementer" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Leverandørnavn" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Ordren kan ikke kanselleres" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Tillat ordre å lukkes med ufullstendige linjeelementer" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Ordren har ufullstendige linjeelementer" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Ordren er ikke åpen" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Innkjøpsvaluta" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU-kode" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Internt delnummer" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Leverandørdel må angis" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Innkjøpsordre må angis" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Leverandør må samsvare med innkjøpsordre" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Innkjøpsordre må samsvare med leverandør" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Ordrelinje" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Velg lagerplassering for mottatte enheter" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Angi batchkode for innkommende lagervarer" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Utløpsdato" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Angi serienummer for innkommende lagervarer" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Strekkode" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Skannet strekkode" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Strekkode allerede i bruk" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Linjeelementer må være oppgitt" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Målplassering må angis" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Angitte strekkodeverdier må være unike" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Fullførte forsendelser" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Valuta for salgspris" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Ingen forsendelsesopplysninger oppgitt" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Linjeelement er ikke knyttet til denne ordren" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Mengden må være positiv" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Skriv inn serienummer for å tildele" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Forsendelsen er allerede sendt" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Forsendelsen er ikke knyttet til denne ordren" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Ingen treff funnet for følgende serienummer" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Returordrelinje" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Linjeelementet samsvarer ikke med returordre" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Linjeelementet er allerede mottatt" -#: order/serializers.py:2043 +#: order/serializers.py:2156 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:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Valuta for linje" @@ -5797,7 +5841,7 @@ msgstr "Standard nøkkelord for deler i denne kategorien" msgid "Icon" msgstr "Ikon" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikon (valgfritt)" @@ -5818,7 +5862,7 @@ msgstr "Standardverdi" msgid "Default Parameter Value" msgstr "Standard Parameterverdi" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Deler" @@ -5933,7 +5977,7 @@ msgstr "Del-nøkkelord for å øke synligheten i søkeresultater" msgid "Part category" msgstr "Delkategori" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "Delrevisjon eller versjonsnummer" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Revisjon" @@ -5966,7 +6010,7 @@ msgstr "Standard utløp" msgid "Expiry time (in days) for stock items of this part" msgstr "Utløpstid (i dager) for lagervarer av denne delen" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimal lagerbeholdning" @@ -6447,355 +6491,355 @@ msgstr "Del-forhold kan ikke opprettes mellom en del og seg selv" msgid "Duplicate relationship already exists" msgstr "Duplikatforhold eksisterer allerede" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Underkategorier" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Innkjøpsvaluta for lagervaren" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Original Del" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Velg original del å duplisere" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Kopier Bilde" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Kopier bilde fra originaldel" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Kopier Stykkliste" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Kopier stykkliste fra original del" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Kopier parameterdata fra originaldel" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Kopier notater" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Kopier notater fra originaldel" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:448 +#: part/serializers.py:451 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:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Innledende lagerplassering" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Angi initiell lagerplasering for denne delen" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Velg leverandør (eller la stå tom for å hoppe over)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Velg produsent (eller la stå tom for å hoppe over)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Produsentens delenummer" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "Valgt firma er ikke en gyldig leverandør" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "Valgt firma er ikke en gyldig produsent" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Produsentdel som matcher dette MPN-et, finnes allerede" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Leverandørdel som matcher denne SKU-en, finnes allerede" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Kategorinavn" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Produseres" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Lagervarer" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Total lagerbeholdning" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Dupliser del" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Kopier innledende data fra en annen del" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Lag en del med innledende lagermengde" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Leverandøropplysninger" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Legg til innledende leverandørinformasjon for denne delen" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Kopier kategoriparametre" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Kopier parametermaler fra valgt delkategori" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Eksisterende bilde" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Filnavn for et eksisterende del-bilde" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Bildefilen finnes ikke" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Godkjenn hele Stykklisten" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Kan Produsere" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Minstepris" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Overstyr beregnet verdi for minimumspris" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Valuta for minstepris" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Makspris" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Overstyr beregnet verdi for maksimal pris" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Valuta for maksimal pris" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Oppdater" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Oppdater priser for denne delen" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, 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:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Minsteprisen kan ikke være større enn maksimal pris" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Maksimal pris kan ikke være mindre enn minstepris" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Velg del å kopiere BOM fra" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Fjern eksisterende data" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Fjern eksisterende BOM-artikler før kopiering" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Inkluder arvede" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Inkluder BOM-artikler som er arvet fra maldeler" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Hopp over ugyldige rader" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Aktiver dette alternativet for å hoppe over ugyldige rader" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Kopier erstatningsdeler" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopier erstatningsdeler når BOM-elementer dupliseres" @@ -7516,7 +7560,7 @@ msgstr "Kantlinjer" msgid "Print a border around each label" msgstr "Skriv ut en kant rundt hver etikett" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "Liggende" @@ -7596,64 +7640,77 @@ msgstr "Gir støtte for å skanne TME-strekkoder" msgid "The Supplier which acts as 'TME'" msgstr "Leverandøren som fungerer som \"TME\"" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Installasjon av utvidelse vellykket" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Installerte utvidelsen til {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "Installasjonen ble ikke bekreftet" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Full omlasting" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Utfør en full omlasting av utvidelsesregisteret" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Tvangsomlasting" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 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:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Hent inn utvidelser" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Hent inn utvidelser og legg dem til i registeret" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Aktivér utvidelse" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Aktivér denne utvidelsen" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "Malnavn" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "Filnavnmønster" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Filtre" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "Sidestørrelse for PDF-rapporter" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "Generer rapport i landskapsorientering" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Bredde [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "Etikettbredde, spesifisert i mm" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Høyde [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "Etiketthøyde, spesifisert i mm" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "Snutt" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "Rapportsnuttfil" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "Filbeskrivelse for snutt" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "Ressurs" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "Rapportressursfil" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "Ressursfilbeskrivelse" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "Testrapport for lagervare" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Installerte artikler" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "part_image-taggen krever en Part-instans" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "company_image-taggen krever en Company-instans" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "Utløpsdato før" msgid "Expiry date after" msgstr "Utløpsdato etter" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Foreldet" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "Lagervarer kan ikke plasseres i strukturelle plasseringer!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Lagervare kan ikke opprettes for virtuelle deler" @@ -8567,7 +8628,7 @@ msgstr "Velg en tilsvarende leverandørdel for denne lagervaren" msgid "Where is this stock item located?" msgstr "Hvor er denne lagervaren plassert?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Inpakningen denne lagervaren er lagret i" @@ -8583,7 +8644,7 @@ msgstr "Er denne artikkelen montert i en annen artikkel?" msgid "Serial number for this item" msgstr "Serienummer for denne artikkelen" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Batchkode for denne lagervaren" @@ -8696,7 +8757,7 @@ msgstr "Lagervare er for tiden i produksjon" msgid "Serialized stock cannot be merged" msgstr "Serialisert lagerbeholdning kan ikke slås sammen" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Duplisert lagervare" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "Overodnet element" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 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:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Angi serienummer for nye artikler" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Leverandørens delnummer" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Utløpt" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Underordnede artikler" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "Innkjøpspris for denne lagervaren, per enhet eller forpakning" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Angi antall lagervarer som skal serialiseres" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Antall kan ikke overstige tilgjengelig lagerbeholdning ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Til Lagerplassering" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Serienummer kan ikke tilordnes denne delen" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Seriernummer eksisterer allerede" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Velg lagervare å montere" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Antall å installere" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Angi antallet elementer som skal installeres" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Legg til transaksjonsnotat (valgfritt)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "Antall å installere må være minst 1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Lagervaren er utilgjengelig" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Valgt del er ikke i stykklisten" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "Antall å installere må ikke overskride tilgjengelig antall" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Lagerplassering for den avinstallerte artikkelen" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Velg del å konvertere lagervare til" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "Valgt del er ikke et gyldig alternativ for konvertering" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Kan ikke konvertere lagerprodukt med tildelt leverandørdel" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Lagervare statuskode" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Velg lagervarer for å endre status" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Ingen lagervarer valgt" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Underplasseringer" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Delen må være salgbar" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Artikkelen er tildelt en salgsordre" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Artikkelen er tildelt en produksjonsordre" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Kunde å tilordne lagervarer" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "Valgt firma er ikke en kunde" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Lagervare-tildelignsnotater" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "En liste av lagervarer må oppgis" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Notater om lagersammenslåing" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Tillat forskjellige leverandører" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Tillat lagervarer med forskjellige leverandørdeler å slås sammen" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Tillat forskjellig status" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Tillat lagervarer med forskjellige statuskoder å slås sammen" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Minst to lagervarer må oppgis" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Lagervare primærnøkkel verdi" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Lager transaksjonsnotater" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "Salgsordre" msgid "Return Orders" msgstr "Returordrer" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Brukernavn" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Fornavn" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Fornavn på brukeren" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Etternavn" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Etternavn på brukeren" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "E-postadressen til brukeren" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Personale" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Har denne brukeren personelltillatelser" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superbruker" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Er denne brukeren en superbruker" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Er denne brukerkontoen aktiv" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Din konto er opprettet." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Vennligst bruk funksjonen for å tilbakestille passord for å logge inn" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Velkommen til InvenTree" diff --git a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po index 0d487a8ef0..abaaa80f1e 100644 --- a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -49,7 +49,7 @@ msgstr "Nie dostarczono danych" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Użytkownik nie ma uprawnień do przeglądania tego modelu" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Nie udało się przeliczyć {original} na {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Podano nieprawidłową ilość" @@ -104,13 +104,13 @@ msgstr "Wprowadź dane" msgid "Invalid decimal value" msgstr "Niepoprawna wartość dziesiętna" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Uwagi" @@ -123,75 +123,91 @@ msgstr "Wartość '{name}' nie pojawia się w formacie wzoru" msgid "Provided value does not match required pattern: " msgstr "Podana wartość nie pasuje do wymaganego wzoru: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Nie można serializować więcej niż 1000 przedmiotów naraz" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Pusty ciąg numeru seryjnego" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Podwójny numer seryjny" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Nieprawidłowa grupa: {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Zakres grupy {group} przekracza dozwoloną ilość ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Nie znaleziono numerów seryjnych" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Liczba niepowtarzających się numerów seryjnych ({n}) musi odpowiadać ilości / liczbie ({q})" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Usuń znaczniki HTML z tej wartości" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "Dane zawierają zabronione treści znacznika" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Błąd połączenia" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Serwer odpowiedział z nieprawidłowym kodem statusu" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Wystąpił wyjątek" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Serwer odpowiedział z nieprawidłową wartością Content-Length" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Rozmiar obrazu jest zbyt duży" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Przekroczono maksymalny rozmiar pobieranego obrazu" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Zdalny serwer zwrócił pustą odpowiedź" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Podany adres URL nie jest poprawnym plikiem obrazu" @@ -199,7 +215,7 @@ msgstr "Podany adres URL nie jest poprawnym plikiem obrazu" msgid "Log in to the app" msgstr "Logowanie do aplikacji" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Adres E-Mail" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Błędny wybór" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nazwa" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Opis" msgid "Description (optional)" msgstr "Opis (opcjonalny)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Ścieżka" @@ -320,51 +336,51 @@ msgstr "Błąd został zapisany w logach serwera." msgid "Image" msgstr "Obraz" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Numer musi być prawidłowy" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Waluta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Wybierz walutę z dostępnych opcji" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Nieprawidłowa wartość" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Obrazek zewnętrzny" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "Adres URL zdalnego pliku obrazu" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Pobieranie obrazów ze zdalnego URL nie jest włączone" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Nie udało się pobrać obrazu ze zdalnego adresu URL" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "chiński (uproszczony)" msgid "Chinese (Traditional)" msgstr "chiński (tradycyjny)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Dostępna aktualizacja" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "Dostępna jest aktualizacja dla InvenTree" @@ -536,7 +552,7 @@ msgstr "Niewłaściwa jednostka fizyczna" msgid "Not a valid currency code" msgstr "Nieprawidłowy kod waluty" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Status zamówienia" @@ -545,21 +561,21 @@ msgstr "Status zamówienia" msgid "Parent Build" msgstr "Budowa nadrzędna" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Obejmuje warianty" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "Obejmuje warianty" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "Obejmuje warianty" msgid "Part" msgstr "Komponent" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategoria" @@ -653,16 +669,16 @@ msgstr "Wyklucz drzewo" msgid "Build must be cancelled before it can be deleted" msgstr "Kompilacja musi zostać anulowana, zanim będzie mogła zostać usunięta" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Materiał eksploatacyjny" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Opcjonalne" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Złożenie" @@ -671,32 +687,32 @@ msgstr "Złożenie" msgid "Tracked" msgstr "Śledzony" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testowalne" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Zaległe zamówienie" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Przydzielono" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Dostępne" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "W Zamówieniu" @@ -704,26 +720,26 @@ msgstr "W Zamówieniu" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Zlecenie Budowy" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Lokalizacja" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Wyjście" @@ -767,8 +783,8 @@ msgstr "Data docelowa musi być po dacie rozpoczęcia" msgid "Build Order Reference" msgstr "Odwołanie do zamówienia wykonania" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Odwołanie do zamówienia sprzedaży" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Lokalizacja źródła" @@ -845,16 +861,16 @@ msgstr "Status budowania" msgid "Build status code" msgstr "Kod statusu budowania" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Kod partii" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Kod partii dla wyjścia budowy" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Data utworzenia" @@ -875,7 +891,7 @@ msgstr "Docelowy termin zakończenia" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Docelowa data zakończenia kompilacji. Po tej dacie kompilacja będzie zaległa." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Data zakończenia" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Priorytet tego zamówienia produkcji" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Kod projektu" @@ -948,7 +964,7 @@ msgstr "Kolejność kompilacji {build} została zakończona" msgid "A build order has been completed" msgstr "Kolejność kompilacji została zakończona" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Należy podać numery seryjne dla lokalizowania części" @@ -964,23 +980,23 @@ msgstr "Budowanie wyjścia jest już ukończone" msgid "Build output does not match Build Order" msgstr "Skompilowane dane wyjściowe nie pasują do kolejności kompilacji" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Ilość musi być większa niż zero" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Ilość nie może być większa niż ilość wyjściowa" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Wyjście budowy {serial} nie przeszło wszystkich testów" @@ -1001,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "Zbuduj obiekt" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Zbuduj obiekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "Ilość musi wynosić 1 dla serializowanych zasobów" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Przydzielona ilość ({q}) nie może przekraczać dostępnej ilości zapasów magazynowych ({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "Pozycja magazynowa jest nadmiernie przydzielona" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Element magazynowy" @@ -1083,378 +1099,378 @@ msgstr "Docelowa lokalizacja magazynowa przedmiotu" msgid "Build Level" msgstr "Poziom budowania" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Nazwa komponentu" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Numer seryjny" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Automatycznie przydzielaj numery seryjne" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatycznie przydzielaj wymagane elementy z pasującymi numerami seryjnymi" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Poniższe numery seryjne już istnieją lub są nieprawidłowe" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Odrzuć przydziały" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Zaakceptuj niekompletną alokację" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Usuń produkcje, które nie zostały zakończone" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Niedozwolone" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Zaakceptuj jako zużyte przez zlecenie produkcji" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Nadmierny przydział zasobów" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Zaakceptuj nieprzydzielone" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Zaakceptuj, że przedmioty magazynowe nie zostały w pełni przypisane do tego zlecenia budowy" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Wymagany stan nie został w pełni przypisany" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Akceptuj niekompletne" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Towar musi znajdować się w magazynie" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Dostępna ilość ({q}) przekroczona" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 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:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Wyklucz lokalizację" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Wyklucz produkty magazynowe z wybranej lokalizacji" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Magazyn wymienny" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Towary magazynowe w wielu lokalizacjach mogą być stosowane zamiennie" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Zastępczy magazyn" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Przedmiot opcjonalny" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Przydziel opcjonalne elementy BOM do zbudowania zamówienia" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Odniesienie BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "ID części BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Nazwa części BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Wersja" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Część dostawcy" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Ilość zarezerwowana" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Możliwość śledzenia" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Zezwalaj na warianty" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Element BOM" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "W produkcji" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Zew. zasoby magazynowe" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Dostępna ilość" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Dostępny magazyn zastępczy" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "Wstrzymane" msgid "Cancelled" msgstr "Anulowano" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "Jest plikiem" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1534,11 +1550,11 @@ msgstr "" msgid "No plugin" msgstr "Brak wtyczki" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Zaktualizowany" @@ -1600,7 +1616,7 @@ msgstr "Ciąg musi być unikatowy" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Użytkownik" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Cena" @@ -1633,10 +1649,10 @@ msgstr "" msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktywny" @@ -1660,11 +1676,11 @@ msgstr "Sekret" msgid "Shared secret for HMAC" msgstr "Współdzielony sekret dla HMAC" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "Id wiadomości" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "Unikalny identyfikator dla tej wiadomości" @@ -1714,7 +1730,7 @@ msgstr "Tytuł" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Autor" msgid "Summary" msgstr "Podsumowanie" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Czytaj" @@ -1797,7 +1813,7 @@ msgstr "Brak pliku" msgid "Missing external link" msgstr "Brak zewnętrznego odnośnika" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "Typ modelu" @@ -1833,7 +1849,7 @@ msgstr "Rozmiar pliku" msgid "File size in bytes" msgstr "Rozmiar pliku w bajtach" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Wartość" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Etykieta" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Utworzony" @@ -1998,334 +2014,334 @@ msgstr "Ostatnia aktualizacja" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "Jednostki" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Aktywne" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Szablon" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Dane" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "Wartość parametru" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Uwaga" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Wynik" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "Doręczono" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Klucz" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "Nadpisz" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Jest uruchomiony" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Oczekujce zadania" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Zaplanowane zadania" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Zadania zakończone błędem" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "ID zadania" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Unikalny identyfikator zadania" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Blokada" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Czas blokady" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Nazwa zadania" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funkcja" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Nazwa funkcji" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumenty" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Argumenty zadania" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Nazwa pliku" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Typ modelu" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Użytkownik nie ma uprawnień do tworzenia lub edytowania załączników dla tego modelu" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Lista wyboru jest zablokowana" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Brak grupy" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "Adres URL witryny jest zablokowany przez konfigurację" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Wymagane ponowne uruchomienie" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Zmieniono ustawienie, które wymaga restartu serwera" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Oczekujące migracje" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Liczba oczekujących migracji bazy danych" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Aktywne kody ostrzeżeń" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "ID instancji" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Unikalny identyfikator dla tej instancji InvenTree" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Nazwa instancji serwera" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Użyj nazwy instancji" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nazwa firmy" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "Wewnętrzna nazwa firmy" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "Bazowy URL" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "Bazowy adres URL dla instancji serwera" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Domyślna waluta" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "Interwał aktualizacji waluty" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Jak często aktualizować kursy wymiany walut (ustaw zero aby wyłączyć)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "dni" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "Wtyczka aktualizacji waluty" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "Pobierz z adresu URL" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "Zezwól na pobieranie zewnętrznych obrazów i plików z zewnętrznego URL" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "Limit rozmiaru pobierania" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "Ścisła weryfikacja adresu URL" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "Wymagaj specyfikacji schematu podczas sprawdzania poprawności adresów URL" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "Częstotliwość sprawdzania aktualizacji" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "Jak często aktualizować kursy wymiany walut (ustaw zero aby wyłączyć)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Automatyczna kopia zapasowa" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "Włącz automatyczną kopię zapasową bazy danych i plików multimedialnych" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "Interwał automatycznego tworzenia kopii zapasowych" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "Określ liczbę dni między zdarzeniami automatycznej kopii zapasowej" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "Interwał usuwania zadań" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Obsługa kodu kreskowego" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "Wyrażenie regularne IPN" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "Zezwól na powtarzający się IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "Zezwól na edycję IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "Skopiuj BOM komponentu" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Możliwość zakupu" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "Części są domyślnie z możliwością zakupu" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Możliwość sprzedaży" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "Części są domyślnie z możliwością sprzedaży" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "Części są domyślnie z możliwością śledzenia" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Wirtualny" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "Części są domyślnie wirtualne" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "Pokaż powiązane części" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "Użyj cennika dostawcy" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "Nadpisanie historii zakupów" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Ceny wewnętrzne" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "Włącz drukowanie etykiet" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "Włącz drukowanie etykiet z interfejsu WWW" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "DPI etykiety" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Włącz raporty" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "Tryb Debugowania" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Rozmiar strony" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "Domyślna wielkość strony dla raportów PDF" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "Przekonwertuj walutę" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "Konwertuj wartość przedmiotu na walutę bazową podczas otrzymywania zapasów" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "Automatycznie wypełniaj zlecenia zakupu" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Automatycznie oznacz zlecenia jako zakończone po odebraniu wszystkich pozycji" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Włącz opcję zapomnianego hasła" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "Włącz funkcję zapomnianego hasła na stronach logowania" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Włącz rejestrację" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "Włącz samodzielną rejestrację dla użytkowników na stronach logowania" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "Włącz SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "Włącz SSO na stronach logowania" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "Włącz rejestrację SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Włącz samodzielną rejestrację przez SSO dla użytkowników na stronach logowania" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "Włącz synchronizację grupy SSO" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Włącz synchronizację grup InvenTree z grupami dostarczonymi przez IdP" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "Adres e-mail jest wymagany" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "Autouzupełnianie użytkowników SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "Automatycznie wypełnij dane użytkownika z danych konta SSO" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "E-mail dwa razy" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "Przy rejestracji dwukrotnie zapytaj użytkowników o ich adres e-mail" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Hasło dwukrotnie" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "Przy rejestracji dwukrotnie zapytaj użytkowników o ich hasło" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "Grupuj przy rejestracji" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "Wymuś MFA" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "Użytkownicy muszą używać zabezpieczeń wieloskładnikowych." -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "Sprawdź wtyczki przy starcie" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "Sprawdź dostępność aktualizacji wtyczek" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "Włącz okresowe sprawdzanie aktualizacji zainstalowanych wtyczek" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "Włącz integrację URL" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "Włącz wtyczki, aby dodać ścieżki URL" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "Włącz integrację z aplikacją" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "Włącz wtyczki, aby dodać aplikacje" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "Włącz wtyczki, aby uruchamiać zaplanowane zadania" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "Włącz kody projektów" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "Włącz kody projektów do śledzenia projektów" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "Włącz funkcjonalność dla zapisywania historycznych poziomów zapasów i wartości" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "Komponent jest aktywny" msgid "Manufacturer is Active" msgstr "Producent jest aktywny" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Producent" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Firma" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Adres" @@ -4163,7 +4195,7 @@ msgstr "Notatki wysyłkowe do użytku wewnętrznego" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Komponent producenta" @@ -4181,12 +4213,12 @@ msgstr "Wybierz część" msgid "Select manufacturer" msgstr "Wybierz producenta" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Numer producenta komponentu" @@ -4210,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Dostawca" msgid "Select supplier" msgstr "Wybierz dostawcę" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4258,8 +4290,8 @@ msgstr "koszt podstawowy" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Opakowanie" @@ -4307,14 +4339,18 @@ msgstr "Domyślna waluta używana dla tego dostawcy" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Na stanie" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Ważny" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "Liczba kopii do wydrukowania dla każdej etykiety" msgid "Connected" msgstr "Połączono" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Nieznany" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "Numer zamówienia" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "Posiada ceny" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "Zamówienie" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Komponent wewnętrzny" @@ -4797,27 +4833,27 @@ msgstr "Komponent wewnętrzny" msgid "Order Pending" msgstr "Zamówienie oczekujące" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Zakończone" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Zlecenie zakupu" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "Zlecenie zakupu" msgid "Sales Order" msgstr "Zamówienie zakupu" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "Link do zewnętrznej witryny" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data docelowa" @@ -4919,413 +4955,421 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "Odniesienie zamówienia" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "Status zamówienia zakupu" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "odebrane przez" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "Przeznaczenie" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "Pozycja nie pasuje do zlecenia zakupu" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "Wartość musi być liczbą dodatnią" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Klient" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "Data wysyłki" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "wysłane przez" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "Ilość elementów" -#: order/models.py:1800 -msgid "Line item reference" +#: order/models.py:1814 +msgid "Line Number" msgstr "" -#: order/models.py:1807 -msgid "Line item notes" +#: order/models.py:1815 +msgid "Line number for this item (optional)" msgstr "" #: order/models.py:1822 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1829 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "Odebrane" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Cena zakupu" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "Cena zakupu jednostkowego" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Cena sprzedaży" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "Jednostkowa cena sprzedaży" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Wysłane" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "Wysłana ilość" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "Data wysyłki" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "Sprawdzone przez" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "Użytkownik, który sprawdził tę wysyłkę" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Przesyłka" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "Numer przesyłki" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "Numer śledzenia" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "Informacje o śledzeniu przesyłki" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "Przesyłka została już wysłana" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Zarezerwowana ilość nie może przekraczać ilości na stanie" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "Alokowana ilość musi być większa niż zero" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Linia" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "Komponent" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Kopiuj parametry" @@ -5372,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Zamówienie nie może zostać anulowane" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Zlecenie zakupu musi być określone" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Dostawca musi być zgodny ze zleceniem zakupu" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Zlecenie zakupu musi być zgodne z dostawcą" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Data ważności" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Kod kreskowy" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5797,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5818,7 +5862,7 @@ msgstr "Wartość domyślna" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Części" @@ -5933,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Wersja" @@ -5966,7 +6010,7 @@ msgstr "Domyślne wygasanie" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimalny stan magazynowy" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Podkategorie" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Waluta zakupu tego towaru" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Kopiuj obraz" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Kopiuj BOM" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Towary" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Duplikuj część" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Usuń istniejące dane" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Pomiń nieprawidłowe wiersze" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Włącz tę opcję, aby pominąć nieprawidłowe wiersze" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "Instalacja nie została potwierdzona" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Pełne przeładowanie" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Wykonaj pełne przeładowanie rejestru wtyczek" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Wymuś przeładowanie" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 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:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Zbierz wtyczki" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Zbierz wtyczki i dodaj je do rejestru" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Aktywuj wtyczkę" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Aktywuj tę wtyczkę" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "Nazwa szablonu" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "Wzór nazwy pliku" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Filtry" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "Domyślna wielkość strony dla raportów PDF" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "Renderuj raport w orientacji poziomej" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Szerokość [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Wysokość [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "Wycinek" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Zainstalowane elementy" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "Wybierz pasującą część dostawcy dla tego towaru" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8583,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8696,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "Element nadrzędny" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Termin minął" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Elementy podrzędne" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Numer seryjny już istnieje" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Podlokalizacje" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Część musi być dostępna do sprzedaży" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:240 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Czy to konto użytkownika jest aktywne" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Twoje konto zostało utworzone." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Zresetuj hasło" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Witamy w InvenTree" diff --git a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po index e2df99b075..29d2b4a536 100644 --- a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -49,7 +49,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Usuário não tem permissão para ver este modelo" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Não foi possível converter {original} para {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Quantidade fornecida inválida" @@ -104,13 +104,13 @@ msgstr "Insira uma Data" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Anotações" @@ -123,75 +123,91 @@ msgstr "Valor '{name}' não está no formato correto" msgid "Provided value does not match required pattern: " msgstr "O valor fornecido não corresponde ao padrão exigido: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Número serial em branco" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Número de série duplicado" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Intervalo do grupo {group} excede a quantidade permitida ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Nenhum número de série foi encontrado" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Remova as \"tags\" HTML deste valor" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Erro de conexão" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "O servidor respondeu com código estado inválido" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Ocorreu uma exceção" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "O servidor respondeu com valor inválido do tamanho de conteúdo" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Tamanho da imagem muito grande" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "O download da imagem excedeu o tamanho máximo" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "O servidor remoto retornou resposta vazia" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "A URL fornecida não é um arquivo de imagem válido" @@ -199,7 +215,7 @@ msgstr "A URL fornecida não é um arquivo de imagem válido" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Email" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Escolha inválida" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nome" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Descrição" msgid "Description (optional)" msgstr "Descrição (opcional)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Caminho" @@ -320,51 +336,51 @@ msgstr "Log de erro salvo pelo servidor." msgid "Image" msgstr "Imagem" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Preicsa ser um numero valido" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Moeda" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Selecione a Moeda nas opções disponíveis" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Imagens Remota" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL do arquivo de imagem remoto" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Baixar imagens de URL remota não está habilitado" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "Chinês (Simplificado)" msgid "Chinese (Traditional)" msgstr "Chinês (Tradicional)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "Unidade física inválida" msgid "Not a valid currency code" msgstr "Não é um código de moeda válido" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Situação do pedido" @@ -545,21 +561,21 @@ msgstr "Situação do pedido" msgid "Parent Build" msgstr "Produção Progenitor" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Peça" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoria" @@ -653,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Produção deve ser cancelada antes de ser deletada" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Consumível" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Opcional" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Montagem" @@ -671,32 +687,32 @@ msgstr "Montagem" msgid "Tracked" msgstr "Monitorado" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Alocado" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponível" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "No pedido" @@ -704,26 +720,26 @@ msgstr "No pedido" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Ordem de Produção" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Local" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "Referência do pedido de produção" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Referência do pedido de venda" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Local de Origem" @@ -845,16 +861,16 @@ msgstr "Progresso da produção" msgid "Build status code" msgstr "Código de situação da produção" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Código de Lote" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Código do lote para esta saída de produção" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Criado em" @@ -875,7 +891,7 @@ msgstr "Data alvo final" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Data alvo para finalização de produção. Estará atrasado a partir deste dia." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Data de conclusão" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Prioridade deste pedido de produção" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Código do projeto" @@ -948,7 +964,7 @@ msgstr "O Pedido de produção {build} foi concluído!" msgid "A build order has been completed" msgstr "Um pedido de produção foi concluído" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Números de série devem ser fornecidos para peças rastreáveis" @@ -964,23 +980,23 @@ msgstr "Saída de produção já completada" msgid "Build output does not match Build Order" msgstr "Saída da produção não corresponde ao Pedido de Produção" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Quantidade deve ser maior que zero" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Quantidade não pode ser maior do que a quantidade de saída" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, 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" @@ -1001,10 +1017,10 @@ msgstr "Item da linha de Produção" msgid "Build object" msgstr "Objeto de produção" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Objeto de produção" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "Quantidade deve ser 1 para estoque serializado" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Quantidade alocada ({q}) não deve exceder a quantidade disponível em estoque ({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "O item do estoque está sobre-alocado" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Item de estoque" @@ -1083,378 +1099,378 @@ msgstr "Destino do Item do Estoque" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Nome da Peça" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Saída da Produção" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Saída de produção não coincide com a produção progenitora" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Peça de saída não coincide com a peça da ordem de produção" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Esta saída de produção já foi concluída" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "A saída de produção não está completamente alocada" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Entre a quantidade da saída de produção" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Quantidade inteira necessária para peças rastreáveis" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Quantidade inteira necessária, pois a lista de materiais contém peças rastreáveis" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Números de Série" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Digite os números de série para saídas de produção" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Local de estoque para a produção" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Alocar Números de Série Automaticamente" -#: build/serializers.py:378 +#: build/serializers.py:385 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:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Os seguintes números de série já existem ou são inválidos" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Uma lista de saídas de produção deve ser fornecida" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Local de estoque para saídas recicladas" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Descartar alocações" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar quaisquer alocações de estoque para saídas sucateadas" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Motivo para sucatear saída(s) de produção" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Local para saídas de produção concluídas" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Aceitar Alocação Incompleta" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Concluir saídas se o estoque não tiver sido totalmente alocado" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Consumir Estoque Alocado" -#: build/serializers.py:691 +#: build/serializers.py:698 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:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Remover Saídas Incompletas" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Excluir quaisquer saídas de produção que não tenham sido completadas" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Não permitido" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Aceitar conforme consumido por esta ordem de produção" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Desatribua antes de completar este pedido de produção" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Estoque sobrealocado" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Como deseja manejar itens de estoque extras atribuídos ao pedido de produção" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Alguns itens de estoque foram sobrealocados" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Aceitar não alocados" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Aceitar que os itens de estoque não foram totalmente alocados para esta produção" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Estoque obrigatório não foi totalmente alocado" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Aceitar Incompleto" -#: build/serializers.py:793 +#: build/serializers.py:800 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:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Quantidade de produção requerida não foi concluída" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Pedido de produção tem saídas incompletas" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Linha de produção" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Saída da Produção" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Saída de produção deve indicar a mesma produção" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Item da linha de produção" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bin_item.part deve indicar a mesma peça do pedido de produção" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Item deve estar em estoque" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantidade disponível ({q}) excedida" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Saída de produção deve ser definida para alocação de peças rastreadas" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Saída de produção deve ser definida para alocação de peças não rastreadas" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Alocação do Item precisa ser fornecida" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Local de estoque onde peças serão extraídas (deixar em branco para qualquer local)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Local não incluso" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Não incluir itens de estoque deste local" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Estoque permutável" -#: build/serializers.py:1103 +#: build/serializers.py:1110 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:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Substituir Estoque" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Permitir alocação de peças substitutas" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Itens opcionais" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Alocar itens LDM opcionais para o pedido de produção" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Fornecedor da Peça" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Quantidade Alocada" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Rastreável" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Permitir variações" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Item LDM" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "Em Produção" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Estoque Disponível" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "Cancelado" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "Pedido de produção vencido" msgid "Build order {bo} is now overdue" msgstr "Pedido de produção {bo} está atrasada" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "É uma Ligação" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "É um arquivo" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "O Utilizador não tem permissão para remover este anexo" @@ -1534,11 +1550,11 @@ msgstr "Nenhum código de moeda válido foi fornecido" msgid "No plugin" msgstr "Sem extensão" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Atualizado" @@ -1600,7 +1616,7 @@ msgstr "A frase senha deve ser diferenciada" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Usuario" msgid "Price break quantity" msgstr "Quantidade de Parcelamentos" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Preço" @@ -1633,10 +1649,10 @@ msgstr "Ponto final em qual o gancho web foi recebido" msgid "Name for this webhook" msgstr "Nome para este webhook" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Ativo" @@ -1660,11 +1676,11 @@ msgstr "Segredo" msgid "Shared secret for HMAC" msgstr "Segredo compartilhado para HMAC" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "ID da Mensagem" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "Identificador exclusivo desta mensagem" @@ -1714,7 +1730,7 @@ msgstr "Título" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Autor" msgid "Summary" msgstr "Resumo" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Lida" @@ -1797,7 +1813,7 @@ msgstr "Arquivo ausente" msgid "Missing external link" msgstr "Link externo não encontrado" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Valor" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Criado" @@ -1998,334 +2014,334 @@ msgstr "Última atualização" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "Modelo de parâmetro" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "Parâmetros da caixa de seleção não podem ter unidades" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "Os parâmetros da caixa de seleção não podem ter escolhas" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "Escolhas devem ser únicas" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "Nome do modelo de parâmetro deve ser único" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "Nome do Parâmetro" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "Unidades" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "Unidades físicas para este parâmetro" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "Descrição do Parâmetro" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "Caixa de seleção" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "Este parâmetro é uma caixa de seleção?" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "Escolhas" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "Opções válidas para este parâmetro (separadas por vírgulas)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "Escolha inválida para valor do parâmetro" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Modelo" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Dados" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "Valor do Parâmetro" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Anotação" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Campo opcional de notas" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Resultado" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Chave" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Executando" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Tarefas Pendentes" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Tarefas Agendadas" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Tarefas com Falhas" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "ID da Tarefa" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "ID Único da Tarefa" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Bloquear" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Tempo de bloqueio" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Nome da tarefa" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Função" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Nome da função" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumentos" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Argumentos da tarefa" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Argumentos de Palavra-chave" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Argumentos Palavra-chave da Tarefa" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Nome do arquivo" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Nenhum grupo" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "URL do site está bloqueada por configuração" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Reinicialização necessária" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Uma configuração que requer uma reinicialização do servidor foi alterada" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Migrações pendentes" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Número de migrações pendentes na base de dados" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Nome da Instância do Servidor" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Descritor de frases para a instância do servidor" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Usar nome da instância" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Usar o nome da instância na barra de título" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Restringir a exibição 'sobre'" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Mostrar 'sobre' modal apenas para superusuários" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nome da empresa" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "Nome interno da Empresa" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "URL de Base" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "URL Base da instância do servidor" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Moeda Padrão" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "Selecione a moeda base para cálculos de preços" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "Moedas suportadas" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "Lista de códigos de moeda suportados" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "Intervalo de Atualização da Moeda" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Com que frequência atualizar as taxas de câmbio (defina como zero para desativar)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "dias" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "Extensão de Atualização de Moeda" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "Extensão de Atualização de Moeda a utilizar" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "Baixar do URL" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "Permitir baixar imagens remotas e arquivos de URLs externos" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "Limite de tamanho para baixar" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "Maior tamanho de imagem remota baixada permitida" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "Usuário-agente utilizado para baixar da URL" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Permitir a substituição de imagens e arquivos usados baixados por usuário-agente (deixar em branco por padrão)" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "Validação rigorosa de URL" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "Exigir especificação de esquema ao validar URLs" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "Atualizar Intervalo de Verificação" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "Frequência para verificar atualizações (defina como zero para desativar)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Cópia de Segurança Automática" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "Ativar cópia de segurança automática do banco de dados e arquivos de mídia" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "Intervalo de Backup Automático" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "Especificar o número de dia entre as cópias de segurança" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "Intervalo para Excluir da Tarefa" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "Os resultados da tarefa no plano de fundo serão excluídos após um número especificado de dias" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "Intervalo para Excluir do Registro de Erro" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "Registros de erros serão excluídos após um número especificado de dias" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "Intervalo para Excluir de Notificação" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "Notificações de usuários será excluído após um número especificado de dias" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Suporte aos códigos de barras" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "Ativar suporte a leitor de código de barras na interface web" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "Atraso na entrada de código de barras" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "Tempo de atraso de processamento de entrada de barras" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "Suporte a código de barras via Câmera" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "Permitir escanear código de barras por câmera pelo navegador" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "Revisões de peças" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "Habilitar campo de revisão para a Peça" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "Permitir a exclusão da Montagem" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "Permitir a remoção de peças usadas em uma montagem" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "Padrão de expressão regular adequado para Peça IPN" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "Permitir Duplicação IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "Permitir que várias peças compartilhem o mesmo IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "Permitir Edição IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "Permitir trocar o valor do IPN enquanto se edita a peça" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "Copiar dados da LDM da Peça" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "Copiar dados da LDM por padrão quando duplicar a peça" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "Copiar Dados de Parâmetro da Peça" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "Copiar dados de parâmetros por padrão quando duplicar uma peça" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "Copiar Dados Teste da Peça" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "Copiar dados de teste por padrão quando duplicar a peça" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "Copiar Parâmetros dos Modelos de Categoria" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "Copiar parâmetros do modelo de categoria quando criar uma peça" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "Peças são modelos por padrão" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "Peças podem ser montadas a partir de outros componentes por padrão" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Componente" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "Peças podem ser usadas como sub-componentes por padrão" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Comprável" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "Peças são compráveis por padrão" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Vendível" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "Peças vão vendíveis por padrão" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "Peças vão rastreáveis por padrão" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Virtual" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "Peças são virtuais por padrão" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "Mostra peças relacionadas" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "Mostrar peças relacionadas para uma peça" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "Dados Iniciais de Estoque" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "Permitir Criação de estoque inicial quando adicional uma nova peça" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "Dados Iniciais de Fornecedor" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Permitir criação de dados iniciais de fornecedor quando adicionar uma nova peça" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "Formato de Exibição do Nome da Peça" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "Formato para exibir o nome da peça" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "Ícone de Categoria de Peça Padrão" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "Ícone padrão de categoria de peça (vazio significa sem ícone)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "Mínimo de Casas Decimais do Preço" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Mínimo número de casas decimais a exibir quando renderizar dados de preços" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "Máximo Casas Decimais de Preço" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Número máximo de casas decimais a exibir quando renderizar dados de preços" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "Usar Preços do Fornecedor" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Incluir quebras de preço do fornecedor nos cálculos de preços globais" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "Sobrescrever histórico de compra" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Histórico do pedido de compra substitui os intervalos dos preços do fornecedor" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "Usar Preços do Item em Estoque" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Usar preço inserido manualmente no estoque para cálculos de valores" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "Idade do preço do Item em Estoque" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Não incluir itens em estoque mais velhos que este número de dias no cálculo de preços" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "Usar Preço Variável" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "Incluir preços variáveis nos cálculos de valores gerais" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "Apenas Ativar Variáveis" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "Apenas usar peças variáveis ativas para calcular preço variáveis" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "Intervalo de Reconstrução de Preços" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "Número de dias antes da atualização automática dos preços das peças" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Preços Internos" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "Habilitar preços internos para peças" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "Sobrepor Valor Interno" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "Se disponível, preços internos sobrepõe variação de cálculos de preço" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "Ativar impressão de etiquetas" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "Ativar impressão de etiqueta pela interface da internet" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "DPI da Imagem na Etiqueta" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Resolução de DPI quando gerar arquivo de imagens para fornecer à extensão de impressão de etiquetas" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Habilitar Relatórios" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "Ativar geração de relatórios" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "Modo de depuração" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "Gerar relatórios em modo de depuração (saída HTML)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "Relatório de erros" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "Registro de erros que ocorrem ao gerar relatórios" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Tamanho da página" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "Tamanho padrão da página PDF para relatórios" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "Forçar Unidades de Parâmetro" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "Se as unidades são fornecidas, os valores do parâmetro devem corresponder às unidades especificadas" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "Seriais Únicos Globais" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "Números de série para itens de estoque devem ser globalmente únicos" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "Excluir Estoque Esgotado" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "Determina o comportamento padrão quando um item de estoque é esgotado" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "Modelo de Código de Lote" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "Modelo para gerar códigos de lote padrão para itens de estoque" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "Validade do Estoque" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "Ativar função de validade de estoque" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "Vender estoque expirado" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "Permitir venda de estoque expirado" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "Tempo de Estoque Inativo" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "Número de dias em que os itens em estoque são considerados obsoleto antes de vencer" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "Produzir Estoque Vencido" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "Permitir produção com estoque vencido" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "Controle de propriedade do estoque" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "Ativar controle de propriedade sobre locais e itens de estoque" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "Ícone padrão do local de estoque" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "Ícone padrão de local de estoque (vazio significa sem ícone)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "Mostrar Itens de Estoque Instalados" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "Exibir itens de estoque instalados nas tabelas de estoque" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "Verificar BOM ao instalar itens" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Itens de estoque instalados devem existir na BOM para a peça parente" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "Permitir Transferência Fora do Estoque" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Permitir que os itens que não estão em estoque sejam transferidos entre locais de estoque" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Produção" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Produção" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "Requer Proprietário Responsável" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "Um proprietário responsável deve ser atribuído a cada ordem" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Bloquear até os Testes serem Aprovados" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Impedir que as saídas da produção sejam concluídas até que todos os testes sejam aprovados" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "Ativar Pedidos de Devolução" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "Ativar funcionalidade de pedido de retorno na interface do usuário" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Devolução" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "Editar os Pedidos de Devolução Concluídos" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "Permitir a edição de pedidos de devolução após serem enviados ou concluídos" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Venda" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Venda" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "Envio Padrão de Pedidos de Venda" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "Habilitar criação de envio padrão com Pedidos de Vendas" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "Editar os Pedidos de Vendas concluídos" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Permitir a edição de pedidos de vendas após serem enviados ou concluídos" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Compras" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Compra" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "Editar Pedidos de Compra Concluídos" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Permitir a edição de pedidos de compras após serem enviados ou concluídos" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "Autocompletar Pedidos de Compra" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Marcar automaticamente os pedidos de compra como concluídos quando todos os itens de linha forem recebidos" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Habitar esquecer senha" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "Habilitar a função \"Esqueci minha senha\" nas páginas de acesso" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Habilitar cadastro" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "Ativar auto-registro para usuários na página de entrada" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "Ativar SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "Ativar SSO na página de acesso" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "Ativar registro SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Ativar auto-registro por SSO para usuários na página de entrada" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "Email obrigatório" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "Exigir do usuário o e-mail no cadastro" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "Auto-preencher usuários SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "Preencher automaticamente os detalhes do usuário a partir de dados da conta SSO" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "Enviar email duplo" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "No registro pedir aos usuários duas vezes pelo email" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Senha duas vezes" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "No registro pedir aos usuários duas vezes pela senha" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "Domínios permitidos" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Restringir registros a certos domínios (separados por vírgula, começando com @)" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "Grupo no cadastro" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "Forçar AMF" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "Os usuários devem usar uma segurança multifator." -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "Checar extensões no início" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Checar que todas as extensões instaladas no início — ativar em ambientes de contêineres" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "Verificar por atualizações de plugin" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "Habilitar verificações periódicas de atualizações para plugins instalados" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "Ativar integração URL" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "Ativar extensão para adicionar rotas URL" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "Ativar integração de navegação" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "Ativar extensões para integrar à navegação" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "Ativa integração com aplicativo" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "Ativar extensões para adicionar aplicativos" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "Ativar integração do calendário" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "Ativar extensões para executar tarefas agendadas" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "Ativar integração de eventos" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "Ativar extensões para responder a eventos internos" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "Excluir Locais Externos" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "Período de Balanço Automático" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "Mostrar nomes completos dos usuários" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "Mostrar Nomes Completos em vez de Nomes de Usuário" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Fabricante" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Empresa" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Endereço" @@ -4163,7 +4195,7 @@ msgstr "Notas de envio para uso interno" msgid "Link to address information (external)" msgstr "Link para as informações do endereço (externo)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Peça do Fabricante" @@ -4181,12 +4213,12 @@ msgstr "Selecionar peça" msgid "Select manufacturer" msgstr "Selecionar fabricante" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "NPF" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Número de Peça do Fabricante" @@ -4210,8 +4242,8 @@ msgstr "Unidades de pacote deve ser maior do que zero" msgid "Linked manufacturer part must reference the same base part" msgstr "Parte do fabricante vinculado deve fazer referência à mesma peça base" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Fornecedor" msgid "Select supplier" msgstr "Selecione o fornecedor" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Unidade de reserva de estoque fornecedor" @@ -4258,8 +4290,8 @@ msgstr "preço base" msgid "Minimum charge (e.g. stocking fee)" msgstr "Taxa mínima (ex.: taxa de estoque)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Embalagem" @@ -4307,14 +4339,18 @@ msgstr "Moeda padrão utilizada para este fornecedor" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Em Estoque" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Válido" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Desconhecido" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "Referência do Pedido" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "Pedido" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Peça Interna" @@ -4797,27 +4833,27 @@ msgstr "Peça Interna" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Concluído" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Pedido de Compra" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "Pedido de Compra" msgid "Sales Order" msgstr "Pedido de Venda" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Descrição do pedido (opcional)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "Selecione o código do projeto para este pedido" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "Link para página externa" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data alvo" @@ -4919,413 +4955,421 @@ msgstr "Ponto de contato para este pedido" msgid "Company address for this order" msgstr "Endereço da empresa para este pedido" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "Referência do pedido" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Situação" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "Situação do pedido de compra" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "Empresa da qual os itens estão sendo encomendados" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "Referencia do fornecedor" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "Código de referência do pedido fornecedor" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "recebido por" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "Dia que o pedido foi concluído" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "Destino" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "Fornecedor de peça deve corresponder a fornecedor da OC" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "O item de linha não corresponde ao pedido de compra" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "Quantidade deve ser um número positivo" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "Empresa para qual os itens foi vendidos" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "Referência do Cliente " -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "Código de Referência do pedido do cliente" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "Data de Envio" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "enviado por" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "Apenas um pedido aberto pode ser marcado como completo" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Pedido não pode ser concluído, pois, há envios incompletos" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "Pedido não pode ser concluído, pois, há itens na linha incompletos" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "Quantidade do item" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1822 msgid "Line item reference" msgstr "Referência do Item em Linha" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "Observações do Item de Linha" -#: order/models.py:1822 +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Data alvo para este item de linha (deixe em branco para usar a data alvo do pedido)" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "Descrição item de linha (opcional)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "Contexto adicional para esta linha" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "Preço Unitário" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "A peça do fornecedor deve corresponder ao fornecedor" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "Fornecedor da Peça" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "Recebido" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "Número de itens recebidos" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Preço de Compra" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "Preço unitário de compra" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "Apenas peças vendáveis podem ser atribuídas a um pedido de venda" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Preço de Venda" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "Preço de venda unitário" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Enviado" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "Quantidade enviada" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "Data do envio" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "Data de Entrega" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "Data da entrega do envio" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "Verificado por" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "Usuário que verificou esta remessa" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Remessa" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "Número do Envio" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "Número de Rastreamento" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "Informação de rastreamento da remessa" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "Número da Fatura" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "Número de referência para fatura associada" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "O pedido já foi enviado" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "Remessa não foi alocada nos itens de estoque" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "O item do estoque não foi atribuído" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "Não é possível alocar o item de estoque para uma linha de uma peça diferente" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "Não é possível alocar uma linha sem uma peça" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "A quantidade de alocação não pode exceder a quantidade em estoque" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "Quantidade alocada deve ser maior que zero" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Quantidade deve ser 1 para item de estoque serializado" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "Pedidos de venda não coincidem com a remessa" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Remessa não coincide com pedido de venda" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Linha" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "Referência de remessa do pedido de venda" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "Selecione o item de estoque para alocar" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "Insira a quantidade de atribuição de estoque" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "Referência de Pedidos de Devolução" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "Empresa da qual os itens estão sendo retornados" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "Estado do pedido de retorno" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "Selecione o item a ser devolvido pelo cliente" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "Data de Recebimento" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "Despesa/gastos" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "Gastos com esta linha de itens" -#: order/models.py:3072 +#: order/models.py:3101 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:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Copiar Parâmetros" @@ -5372,216 +5416,216 @@ msgstr "Itens de linha" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Nome do Fornecedor" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Pedido não pode ser cancelado" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Permitir que o pedido seja fechado com itens de linha incompletos" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "O pedido tem itens da linha incompletos" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "O pedido não está aberto" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Moeda de preço de compra" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Código (SKU)" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Numero interno do produto" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "A peça do fornecedor deve ser especificada" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "O pedido de compra deve ser especificado" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "O fornecedor deve corresponder o pedido de compra" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Pedido de compra deve corresponder ao fornecedor" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Itens de linha" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Selecione o local de destino para os itens recebidos" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Digite o código do lote para itens de estoque recebidos" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Data de validade" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Digite o número de série para itens de estoque recebidos" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Código de barras lido" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Código de barras já em uso" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Itens de linha deve ser providenciados" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Loca de destino deve ser especificado" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Código de barras fornecido deve ser único" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Envios concluídos" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Moeda de preço de venda" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Nenhum detalhe da remessa fornecido" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Item de linha não está associado a este pedido" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Quantidade deve ser positiva" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Digite números de série para alocar" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "O pedido já foi enviado" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "O envio não está associado a este pedido" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Nenhuma correspondência encontrada para os seguintes números de série" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Devolver item do pedido" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Item do pedido não bate com o pedido de devolução" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Item do pedido já foi recebido" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Itens só podem ser recebidos de pedidos em processamento" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Tipo de moeda para o item do pedido" @@ -5797,7 +5841,7 @@ msgstr "Palavras-chave padrão para peças nesta categoria" msgid "Icon" msgstr "Ícone" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ícone (opcional)" @@ -5818,7 +5862,7 @@ msgstr "Valor Padrão" msgid "Default Parameter Value" msgstr "Valor Padrão do Parâmetro" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Peças" @@ -5933,7 +5977,7 @@ msgstr "Palavras-chave para melhorar a visibilidade nos resultados da pesquisa" msgid "Part category" msgstr "Categoria da Peça" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "Revisão de peça ou número de versão" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Revisão" @@ -5966,7 +6010,7 @@ msgstr "Validade Padrão" msgid "Expiry time (in days) for stock items of this part" msgstr "Validade (em dias) para itens do estoque desta peça" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Estoque Mínimo" @@ -6447,355 +6491,355 @@ msgstr "Relacionamento da peça não pode ser criada com ela mesma" msgid "Duplicate relationship already exists" msgstr "Relação duplicada já existe" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Categoria de peça pai" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Sub-categorias" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Moeda de compra deste item de estoque" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Peça Original" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Selecione a peça original para duplicar" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Copiar imagem" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Copiar imagem da peça original" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Copiar LDM" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Copiar lista de materiais da peça original" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Copiar dados do parâmetro da peça original" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Copiar imagem da peça original" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Quantidade Inicial de Estoque" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Especificar a quantidade inicial de estoque para a peça. Se for zero, nenhum estoque é adicionado." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Local Inicial do Estoque" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Especifique o local do estoque inicial para esta Peça" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Selecione o fornecedor (ou deixe em branco para pular)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Selecione fabricante (ou deixe em branco para pular)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Número de Peça do Fabricante" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "A empresa selecionada não é um fornecedor válido" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "A empresa selecionada não é um fabricante válido" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "A peça do fabricante que corresponde a essa MPN já existe" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "A peça do fornecedor que corresponde a essa SKU já existe" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Nome da Categoria" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Produzindo" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Itens de Estoque" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Estoque Total" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Peça duplicada" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Copiar dados iniciais de outra peça" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Estoque inicial" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Criar peça com a quantidade inicial de estoque" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Informações do Fornecedor" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Adicionar informação inicial de fornecedor para esta peça" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Copiar Parâmetros da Categoria" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Copiar modelos de parâmetros a partir de categoria de peça selecionada" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Imagem Existente" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Nome de arquivo de uma imagem de peça existente" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "A imagem não existe" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Validar a Lista de Materiais completa" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Pode Produzir" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Preço Mínimo" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Sobrepor valor calculado para preço mínimo" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Moeda do preço mínimo" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Preço Máximo" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Sobrepor valor calculado para preço máximo" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Moeda do preço máximo" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Atualizar" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Atualizar preços desta peça" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, 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:1528 +#: part/serializers.py:1560 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:1531 +#: part/serializers.py:1563 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:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Selecionar peça para copiar a LDM" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Remover Dado Existente" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Remova itens LDM existentes antes de copiar" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Incluir Herdados" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Incluir itens LDM que são herdados de peças modelo" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Pular Linhas inválidas" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Habilitar esta opção para pular linhas inválidas" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Copiar Peças Substitutas" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copiar peças de substitutas quando duplicar itens de LDM" @@ -7516,7 +7560,7 @@ msgstr "Borda" msgid "Print a border around each label" msgstr "Imprima uma borda em torno de cada etiqueta" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "Paisagem" @@ -7596,64 +7640,77 @@ msgstr "Fornece suporte para escanear códigos de barras TME" msgid "The Supplier which acts as 'TME'" msgstr "O fornecedor que atua como 'TME'" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Plugin instalado com sucesso" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Plugin instalado na {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "Instalação não confirmada" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Recarregamento completo" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Realize um recarregamento completo do registro de plugin" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Forçar recarregamento" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 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" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Coletar plugins" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Colete plugins e adicione-os ao registro" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Ativar Extensão" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Ativar esta extensão" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "Itens" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "Carta" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "Nome do modelo" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "Padrão de Nome de Arquivo" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Filtros" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "Tamanho da página para relatórios PDF" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "Renderizar relatório em orientação paisagem" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Largura [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "Largura da etiqueta, em mm" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Altura [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "Altura da Etiqueta, em mm" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "Recorte" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "Relatar arquivo de recorte" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "Descrição do arquivo de recorte" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "Patrimônio" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "Reportar arquivo de ativos" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "Descrição do arquivo de ativos" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "Selecione o modelo de etiqueta" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "Relatório Teste do Item em Estoque" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Itens instalados" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "Tag part_image necessita de uma instância de Peça" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "Tag company_image necessita de uma instância de Empresa" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "Data de validade antes" msgid "Expiry date after" msgstr "Data de validade depois" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Inativo" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "Os itens de estoque não podem estar localizados em locais de estoque estrutural!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Item de estoque não pode ser criado para peças virtuais" @@ -8567,7 +8628,7 @@ msgstr "Selecione uma peça do fornecedor correspondente para este item de estoq msgid "Where is this stock item located?" msgstr "Onde está localizado este item de estoque?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Embalagem deste item de estoque está armazenado em" @@ -8583,7 +8644,7 @@ msgstr "Este item está instalado em outro item?" msgid "Serial number for this item" msgstr "Número de série para este item" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Código do lote para este item de estoque" @@ -8696,7 +8757,7 @@ msgstr "Item no estoque está em produção no momento" msgid "Serialized stock cannot be merged" msgstr "Itens de série não podem ser mesclados" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Item de estoque duplicado" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "Item Primário" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 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:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Inserir número de série para novos itens" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Expirado" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Itens Filhos" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 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:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Insira o número de itens de estoque para serializar" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Quantidade não deve exceder a quantidade disponível em estoque ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Local de destino do estoque" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Números de série não podem ser atribuídos a esta peça" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Números de série já existem" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Selecione o item de estoque para instalar" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Quantidade a Instalar" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Insira a quantidade de itens a instalar" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Adicionar nota de transação (opcional)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "A quantidade para instalar deve ser pelo menos 1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Item de estoque indisponível" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Peça selecionada não está na Lista de Materiais" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "Quantidade a instalar não deve exceder a quantidade disponível" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Local de destino para o item desinstalado" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Selecione peça para converter o item de estoque em" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "Peça selecionada não é uma opção válida para conversão" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Não é possível converter o item de estoque com a Peça de Fornecedor atribuída" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Código de estado do item estoque" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Selecionar itens de estoque para mudar estados" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Nenhum item de estoque selecionado" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Sub-locais" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Parte deve ser comercializável" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Item é alocado para um pedido de venda" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Item está alocado a um pedido de produção" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Cliente para atribuir itens de estoque" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "A empresa selecionada não é um cliente" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Nodas atribuídas a estoque" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Uma lista de item de estoque deve ser providenciada" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Notas de fusão de estoque" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Permitir fornecedores divergentes" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Permitir a fusão de itens de estoque de fornecedores diferentes" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Permitir estado incompatível" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Permitir a fusão de itens de estoque com estado diferentes" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Ao menos dois itens de estoque devem ser providenciados" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Valor da chave primária do Item Estoque" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Notas da transação de estoque" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "Pedidos de vendas" msgid "Return Orders" msgstr "Pedidos de Devolução" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Nome de usuário" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Primeiro Nome" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Sobrenome" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:240 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Sua conta foi criada." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Por favor, use a função de redefinir senha para acessar" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Bem-vindo(a) ao InvenTree" diff --git a/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po index 0d634b381d..473a4394de 100644 --- a/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -49,7 +49,7 @@ msgstr "Nenhum dado fornecido" msgid "This field must be unique." msgstr "Este campo deve ser único." -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "O usuário não tem permissão para visualizar esse modelo" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Não foi possível converter {original} para {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Quantidade inválida" @@ -104,13 +104,13 @@ msgstr "Informe a data" msgid "Invalid decimal value" msgstr "Valor decimal inválido" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Observações" @@ -123,75 +123,91 @@ msgstr "O valor '{name}' não aparece no formato padrão" msgid "Provided value does not match required pattern: " msgstr "O valor fornecido não corresponde ao padrão exigido: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Não é possível serializar mais de 1000 itens de uma vez" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Número serial em branco" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Número serial duplicado" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Grupo invalido:{group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Intervalo do grupo {group} excede a quantidade permitida ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Nenhum número de série foi encontrado" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "O número de números seriais únicos ({n}) deve corresponder a quantidade ({q})" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Remover as \"tags\" HTML deste valor" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "Os dados contêm conteúdo de marcação proibido" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Erro de conexão" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "O servidor respondeu com código de estado inválido" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Ocorreu uma exceção" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "O servidor respondeu com valor inválido do tamanho de conteúdo" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "O download da imagem excedeu seu tamanho máximo" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "O servidor remoto retornou uma resposta vazia" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "A URL fornecida não é um arquivo de imagem válido" @@ -199,7 +215,7 @@ msgstr "A URL fornecida não é um arquivo de imagem válido" msgid "Log in to the app" msgstr "Entrar no aplicativo" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-mail" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Escolha inválida" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nome" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Descrição" msgid "Description (optional)" msgstr "Descrição (opcional)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Caminho" @@ -320,51 +336,51 @@ msgstr "Um erro foi registrado pelo servidor." msgid "Image" msgstr "Imagem" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Deve ser um número válido" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Moeda" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Selecione a moeda entre as opções disponíveis" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Este campo não pode ser nulo." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Imagem remota" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL do arquivo da imagem remota" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Baixar imagens de URL remota não está habilitado" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Falha ao baixar a imagem da URL remota" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "Formato de conteúdo inválido" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "Tipo de conteúdo não encontrado" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "Chinês (simplificado)" msgid "Chinese (Traditional)" msgstr "Chinês (tradicional)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Atualização disponível" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "Uma atualização para o InvenTree está disponível" @@ -536,7 +552,7 @@ msgstr "Unidade física inválida" msgid "Not a valid currency code" msgstr "O código de moeda não é válido" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Situação de pedido" @@ -545,21 +561,21 @@ msgstr "Situação de pedido" msgid "Parent Build" msgstr "Produção Progenitora" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Incluir Variáveis" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "Incluir Variáveis" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "Incluir Variáveis" msgid "Part" msgstr "Parte" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoria" @@ -653,16 +669,16 @@ msgstr "Excluir árvore" msgid "Build must be cancelled before it can be deleted" msgstr "A compilação deve ser cancelada antes de ser excluída" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Consumível" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Opcional" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Montagem" @@ -671,32 +687,32 @@ msgstr "Montagem" msgid "Tracked" msgstr "Rastreado" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testável" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Pedido pendente" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Alocado" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponível" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Em pedido" @@ -704,26 +720,26 @@ msgstr "Em pedido" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Ordem da compilação" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Local" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Saída" @@ -767,8 +783,8 @@ msgstr "A data limite deve ser posterior à data inicial" msgid "Build Order Reference" msgstr "Referência do pedido de produção" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Referência do pedido de venda" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Local de Origem" @@ -845,16 +861,16 @@ msgstr "Progresso da produção" msgid "Build status code" msgstr "Código de situação da produção" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Código do lote" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Código do lote para esta saída de produção" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Criado em" @@ -875,7 +891,7 @@ msgstr "Data alvo final" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Data limite para finalização de produção. Estará atrasado a partir deste dia." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Data de conclusão" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Prioridade desta ordem de compilação" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Código do Projeto" @@ -948,7 +964,7 @@ msgstr "O Pedido de produção {build} foi concluído" msgid "A build order has been completed" msgstr "Um pedido de produção foi concluído" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Números de série devem ser fornecidos para peças rastreáveis" @@ -964,23 +980,23 @@ msgstr "Saída da produção já está concluída" msgid "Build output does not match Build Order" msgstr "Saída da produção não corresponde à Ordem de Produção" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Quantidade deve ser maior que zero" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "A quantidade não pode ser maior que a quantidade de saída" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "A saída da produção não passou em todos os testes necessários" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "A saída da produção {serial} não passou em todos os testes necessários" @@ -1001,10 +1017,10 @@ msgstr "Item da ordem de produção" msgid "Build object" msgstr "Compilar objeto" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Compilar objeto" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "Quantidade deve ser 1 para estoque serializado" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Quantidade alocada ({q}) não deve exceder a quantidade disponível em estoque ({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "O item do estoque está sobre-alocado" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Item de Estoque" @@ -1083,378 +1099,378 @@ msgstr "Destino do Item do Estoque" msgid "Build Level" msgstr "Nível de produção" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Nome da Peça" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Saída da Produção" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Saída de produção não coincide com a produção progenitora" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Peça de saída não coincide com a peça da ordem de produção" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Esta saída de produção já foi concluída" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Esta saída de produção não está totalmente alocada" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Insira a quantidade para construir a saída de produção" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Quantidade inteira necessária para peças rastreáveis" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Quantidade inteira necessária, pois a lista de materiais contém peças rastreáveis" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Números de Série" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Digite os números de série para saídas de produção" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Local de estoque para saídas de produção" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Alocar Números de Série Automaticamente" -#: build/serializers.py:378 +#: build/serializers.py:385 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:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Os seguintes números de série já existem ou são inválidos" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Uma lista de saídas de produção deve ser fornecida" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Local de estoque para saídas eliminadas" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Descartar alocações" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar quaisquer alocações de estoque para saídas eliminadas" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Motivo para eliminar saída(s) de produção" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Local para saídas de produção concluídas" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Aceitar Alocação Incompleta" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Concluir saídas se o estoque não tiver sido totalmente alocado" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Consumir Estoque Alocado" -#: build/serializers.py:691 +#: build/serializers.py:698 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:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Remover Saídas Incompletas" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Excluir quaisquer saídas de produção que não tenham sido completadas" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Não permitido" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Aceitar conforme consumido por esta ordem de produção" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Desatribua antes de completar esta ordem de produção" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Como deseja manejar itens de estoque extras atribuídos ao pedido de produção" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Alguns itens de estoque foram sobrecarregados" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Aceitar não alocados" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Aceitar que os itens de estoque não foram totalmente alocados para esta encomenda" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Estoque obrigatório não foi totalmente alocado" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Aceitar Incompleto" -#: build/serializers.py:793 +#: build/serializers.py:800 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:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Quantidade de produção requerida não foi concluída" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "A ordem de produção tem ordens de produção secundárias abertas" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Ordem de produção deve estar no estado de produção" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Ordem de produção tem saídas incompletas" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Linha de Produção" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Saída da Produção" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Saída de produção deve indicar a mesma produção" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Item da linha de produção" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part deve apontar para a mesma parte que a ordem de produção" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "O item deve estar em estoque" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantidade disponível ({q}) excedida" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Saída de produção deve ser definida para alocação de peças rastreadas" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Saída de produção não pode ser definida para alocação de peças não rastreadas" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Alocação de itens precisam ser fornecidos" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Localização do estoque onde as peças devem ser originadas (deixe em branco a partir de qualquer local)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Excluir Local" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Excluir itens de estoque desta localização selecionada" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Estoque Intercambiável" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Itens de estoque em múltiplos locais podem ser intercambiáveis" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Estoque Substituto" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Permitir alocação de peças substitutas" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Itens opcionais" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Alocar itens BOM opcionais para ordem de produção" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Referência do BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "ID da parte BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Nome da peça BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Produção" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Fornecedor da Peça" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Quantidade Alocada" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Referência da produção" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Nome da Categoria" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Rastreável" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Herdado" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Item BOM" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "Em Produção" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Agendado para produção" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Estoque Externo" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Estoque Disponível" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Estoque Substituto Disponível" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Estoque de Variantes Disponível" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "Em Espera" msgid "Cancelled" msgstr "Cancelado" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "Ordem de produção vencido" msgid "Build order {bo} is now overdue" msgstr "Ordem de produção {bo} está atrasada" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "É um link" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "É um arquivo" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "O usuário não tem permissão para deletar esses anexos" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "O usuário não tem permissão para deletar esse anexo" @@ -1534,11 +1550,11 @@ msgstr "Nenhum código de moeda válido fornecido" msgid "No plugin" msgstr "Sem extensão" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Rótulo de código do projeto" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Atualizado" @@ -1600,7 +1616,7 @@ msgstr "A frase senha deve ser diferenciada" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Usuário" msgid "Price break quantity" msgstr "Quantidade de Parcelamentos" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Preço" @@ -1633,10 +1649,10 @@ msgstr "Ponto final em qual o webhook foi recebido" msgid "Name for this webhook" msgstr "Nome para este webhook" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Ativo" @@ -1660,11 +1676,11 @@ msgstr "Secreto" msgid "Shared secret for HMAC" msgstr "Segredo compartilhado para HMAC" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "ID da Mensagem" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "Identificador exclusivo desta mensagem" @@ -1714,7 +1730,7 @@ msgstr "Título" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Autor" msgid "Summary" msgstr "Resumo" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Lida" @@ -1797,7 +1813,7 @@ msgstr "Arquivo ausente" msgid "Missing external link" msgstr "Link externo não encontrado" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "Categoria de Modelo" @@ -1833,7 +1849,7 @@ msgstr "Tamanho do arquivo" msgid "File size in bytes" msgstr "Tamanho do arquivo em bytes" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Categoria de modelo especificado inválido para anexo" @@ -1861,7 +1877,7 @@ msgstr "Chave lógica" msgid "State logical key that is equal to this custom state in business logic" msgstr "Chave lógica de estado que é igual a este estado personalizado na lógica de negócios" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Valor" @@ -1874,7 +1890,7 @@ msgstr "Valor numérico que será salvo no banco de dados dos modelos" msgid "Name of the state" msgstr "Nome do estado" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Etiqueta" @@ -1930,7 +1946,7 @@ msgstr "A chave lógica deve estar nas chaves lógicas do estado de referência" msgid "Name must be different from the names of the reference status" msgstr "O nome deve diferir dos nomes do estado de referência" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "Lista de Seleção" @@ -1982,7 +1998,7 @@ msgstr "Entrada Padrão" msgid "Default entry for this selection list" msgstr "Entrada padrão para esta lista de seleção" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Criado em" @@ -1998,334 +2014,334 @@ msgstr "Última Atualização" msgid "Date and time that the selection list was last updated" msgstr "Data e hora da última atualização da lista de seleção" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "Entrada na lista de seleção" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "Entradas na Lista de Seleção" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "Lista de seleção à qual esta entrada pertence" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "Valor da entrada da lista de seleção" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "Rótulo para a entrada da lista de seleção" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "Descrição da entrada da lista de seleção" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "Esta entrada da lista de seleção está ativa?" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "Nome do Parâmetro" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "Unidades" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "Caixa de seleção" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Modelo" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Dados" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Anotação" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Campo opcional de notas" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "Escaneamento de Código de Barras" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "Dados de código de barras" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "Usuário que escaneou o código de barras" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "Marcador de hora" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "Data e hora da verificação do código de barras" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "O endpoint da URL que processou o código de barras" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "Dados de contexto para escanear código de barras" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "Resposta" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "Dados de resposta da verificação de código de barras" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Resultado" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "O código de barras foi digitalizado com sucesso?" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "Ocorreu um erro" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: exclusão de registro de e-mail está protegida. Defina INVENTREE_PROTECT_EMAIL_LOG para Falso para permitir a exclusão." -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "Mensagem de e-mail" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "Mensagens de Email" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "Anunciado" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "Enviado" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "Falhou" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "Entregue" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "Confirmado" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "Entrada" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "Saída" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "Não responder" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "Rastrear Entrega" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "Monitorado" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "Clique no caminho" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "ID Global" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identificador para esta mensagem (pode ser fornecido por sistema externo)" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "ID do Tópico" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identificador deste tópico de mensagem (pode ser fornecido por sistema externo)" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "Tópico" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "Tópico vinculado para esta mensagem" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "Tópico do e-mail" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "Tópicos de e-mail" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Chave" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "Chave única para este tópico (usada para identificar o tópico)" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "Identificador exclusivo deste tópico" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "Iniciado interno" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "Este tópico foi iniciado internamente?" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "Data e hora em que o tópico foi criado" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "Data e hora da última atualização do tópico" @@ -2375,1243 +2391,1259 @@ msgstr "É indicado se a configuração é substituída por uma variável de amb msgid "Override" msgstr "Substituir" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Está em execução" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Tarefas Pendentes" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Tarefas Agendadas" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Tarefas com Falhas" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "ID da Tarefa" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "ID Único da Tarefa" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Bloquear" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Congelar tempo" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Nome da tarefa" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Função" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Nome da função" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumentos" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Argumentos da tarefa" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Argumentos de Palavra-chave" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Argumentos Palavra-chave da Tarefa" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Nome do arquivo" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Categoria de Modelo" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Usuário não tem permissão para criar ou editar anexos para este modelo" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Lista de seleção bloqueada" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Sem Grupo" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "URL do site está bloqueada por configuração" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Reinicialização necessária" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Uma configuração que requer uma reinicialização do servidor foi alterada" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Migrações pendentes" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Número de migrações pendentes na base de dados" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Códigos de aviso ativos" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "Um dicionário dos códigos de aviso ativos" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "ID da instância" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Identificador exclusivo para esta instância do InvenTree" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "Anúncio ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Anuncie a ID da instância do servidor na informação de estado do servidor (não autenticado)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Nome da Instância do Servidor" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Descritor de frases para a instância do servidor" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Usar nome da instância" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Usar o nome da instância na barra de título" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Restringir a exibição 'sobre'" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Mostrar 'sobre' modal apenas para superusuários" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nome da empresa" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "Nome interno da Empresa" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "URL de Base" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "URL de base para instância do servidor" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Moeda Padrão" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "Selecione a moeda base para cálculos de preços" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "Moedas Suportadas" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "Lista de códigos de moeda suportados" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "Intervalo de Atualização da Moeda" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Com que frequência atualizar as taxas de câmbio (defina como zero para desativar)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "dias" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "Extensão de Atualização de Moeda" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "Extensão de Atualização de Moeda a utilizar" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "Baixar do URL" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "Permitir baixar imagens remotas e arquivos de URL externos" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "Limite de tamanho para baixar" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "Tamanho máximo permitido para download da imagem remota" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "Usuário-agente utilizado para baixar da URL" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Permitir a substituição de imagens e arquivos usados baixados por usuário-agente (deixar em branco por padrão)" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "Validação rigorosa de URL" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "Exigir especificação de esquema ao validar URLs" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "Atualizar Intervalo de Verificação" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "Frequência para verificar atualizações (defina como zero para desativar)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Backup Automático" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "Ativar cópia de segurança automática do banco de dados e arquivos de mídia" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "Intervalo de Backup Automático" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "Especificar o número de dia entre as cópias de segurança" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "Intervalo para Excluir da Tarefa" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "Os resultados da tarefa no plano de fundo serão excluídos após um número especificado de dias" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "Intervalo para Excluir do Registro de Erro" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "Registros de erros serão excluídos após um número especificado de dias" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "Intervalo para Excluir de Notificação" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "Notificações de usuários será excluído após um número especificado de dias" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "Intervalo de Exclusão de e-mail" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "Mensagens de e-mail serão excluídas após um determinado número de dias" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "Proteger o Log de E-mail" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "Evitar exclusão de entradas de registros de e-mail" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Suporte aos códigos de barras" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "Ativar suporte a leitor de código de barras na interface web" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "Armazenar Resultados do Código de Barras" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "Armazenar a verificação do código de barras no banco de dados" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "Contagem máxima de códigos de barras" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "Número máximo de resultados de digitalização de códigos de barras para armazenar" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "Atraso na entrada de código de barras" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "Tempo de atraso de processamento de entrada de barras" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "Suporte a webcam com código de barras" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "Permitir a verificação de códigos de barras via webcam no navegador" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "Código de barras Exibir Dados" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "Exibir dados do código de barras no navegador como texto" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "Extensão de geração de códio de barras" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "Extensão para usar para geração de dados de código de barras interno" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "Revisões de peças" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "Ativar campo de revisão para a Peça" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "Somente Revisão da Assembleia" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "Permitir revisões apenas para peças de montagem" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "Permitir a exclusão da Assembleia" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "Permitir a exclusão de peças que são usadas em uma montagem" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "Padrão de expressão regular para correspondência de Parte IPN" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "Permitir Duplicação IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "Permitir que várias peças compartilhem o mesmo IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "Permitir Edição IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "Permitir trocar o valor do IPN enquanto se edita a peça" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "Copiar dados da LDM da Peça" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "Copiar dados da LDM por padrão quando duplicar a peça" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "Copiar Dados de Parâmetro da Peça" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "Copiar dados de parâmetros por padrão quando duplicar uma peça" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "Copiar Dados Teste da Peça" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "Copiar dados de teste por padrão quando duplicar a peça" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "Copiar Parâmetros dos Modelos de Categoria" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "Copiar parâmetros do modelo de categoria quando criar uma peça" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "Peças são modelos por padrão" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "Peças podem ser montadas a partir de outros componentes por padrão" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Componente" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "Peças podem ser usadas como sub-componentes por padrão" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Comprável" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "Peças são compráveis por padrão" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Comercializável" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "Peças vão vendíveis por padrão" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "Peças vão rastreáveis por padrão" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Virtual" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "Peças são virtuais por padrão" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "Mostrar peças relacionadas" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "Exibir peças relacionadas com uma peça" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "Dados Iniciais de Estoque" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "Permitir a criação do estoque inicial quando adicionar uma nova peça" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "Dados Iniciais de Fornecedor" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Permitir a criação de dados iniciais de fornecedor quando adicionar uma nova peça" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "Formato de Exibição do Nome da Peça" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "Formato para exibir o nome da peça" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "Ícone de Categoria de Peça Padrão" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "Ícone padrão de categoria de peça (vazio significa sem ícone)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "Mínimo de Casas Decimais do Preço" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Mínimo número de casas decimais a exibir quando renderizar dados de preços" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "Máximo Casas Decimais de Preço" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Número máximo de casas decimais a exibir quando renderizar dados de preços" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "Usar Preços do Fornecedor" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Incluir quebras de preço do fornecedor nos cálculos de preços globais" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "Substituir Histórico de Compras" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Histórico do pedido de compra substitui os intervalos dos preços do fornecedor" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "Usar Preços do Item em Estoque" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Usar preço inserido manualmente no estoque para cálculos de valores" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "Idade do preço do Item em Estoque" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Não incluir itens em estoque mais velhos que este número de dias no cálculo de preços" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "Usar Preço Variável" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "Incluir preços variáveis nos cálculos de valores gerais" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "Apenas Ativar Variáveis" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "Apenas usar peças variáveis ativas para calcular preço variáveis" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "Atualização automática dos preços" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "Atualizar automaticamente o preço da peça quando dados internos forem alterados" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "Intervalo de Reconstrução de Preços" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "Número de dias antes da atualização automática dos preços das peças" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Preços Internos" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "Habilitar preços internos para peças" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "Substituição de preço interno" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "Se disponível, os preços internos substituem os cálculos da faixa de preços" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "Habilitar Impressão de Etiqueta" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "Ativar impressão de etiqueta pela interface da internet" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "DPI da Imagem na Etiqueta" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Resolução de DPI quando gerar arquivo de imagens para fornecer à extensão de impressão de etiquetas" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Ativar Relatórios" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "Ativar geração de relatórios" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "Modo de depuração" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "Gerar relatórios em modo de depuração (saída HTML)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "Registro de erros" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "Registrar erros que ocorrem ao gerar relatórios" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Tamanho da página" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "Tamanho padrão da página PDF para relatórios" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "Forçar Unidades de Parâmetro" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "Se as unidades são fornecidas, os valores do parâmetro devem corresponder às unidades especificadas" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "Seriais Únicos Globais" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "Números de série para itens de estoque devem ser globalmente únicos" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "Excluir Estoque Esgotado" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "Determina o comportamento padrão, quando um item de estoque é esgotado" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "Modelo de Código de Lote" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "Modelo para gerar códigos de lote padrão para itens de estoque" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "Validade do Estoque" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "Ativar função de validade de estoque" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "Vender estoque expirado" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "Permitir venda de estoque expirado" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "Tempo de Estoque Inativo" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "Número de dias em que os itens em estoque são considerados obsoleto antes de vencer" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "Produzir Estoque Vencido" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "Permitir produção com estoque vencido" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "Controle de propriedade do estoque" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "Ativar controle de propriedade sobre locais e itens de estoque" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "Ícone padrão do local de estoque" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "Ícone padrão de local de estoque (vazio significa sem ícone)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "Mostrar Itens de Estoque Instalados" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "Exibir itens de estoque instalados nas tabelas de estoque" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "Verificar LDM ao instalar itens" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Itens do estoque instalado devem existir na LDM para a parte principal" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "Permitir Fora de Transferência" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Permitir que os itens que não estão em estoque sejam transferidos entre locais de estoque" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Produção" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Produção" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "Exigir proprietário responsável" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "Um proprietário responsável deve ser atribuído a cada pedido" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "Requer Parte Ativa" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "Impedir a criação de ordem para partes inativas" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "Exigir parte bloqueada" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "Impedir criação de pedidos para peças desbloqueadas" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "Exigir validade, BOM" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "Impedir criação de pedido de compilação a menos que LDM tenha sido validada" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "Exigir pedidos secundários fechados" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "Impedir o preenchimento do pedido de construção até que todos os pedidos secundários sejam fechados" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "Pedido de Produção Externo" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "Ativar funcionalidade de pedido de construção externa" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Bloquear Até Passagem de Testes" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Impedir que as saídas da produção sejam concluídas até que todos os testes necessários passem" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "Ativar Pedidos de Devolução" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "Ativar funcionalidade de pedido de devolução na interface do usuário" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Devolução" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Devolução" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "Editar os Pedidos de Devolução Concluídos" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "Permitir a edição de pedidos de devolução após serem enviados ou concluídos" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Venda" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Venda" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "Envio Padrão de Pedidos de Venda" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "Habilitar criação de envio padrão com Pedidos de Vendas" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "Editar os Pedidos de Vendas concluídos" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Permitir a edição de pedidos de vendas após serem enviados ou concluídos" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "Marcar pedidos enviados como concluídos" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Pedidos de vendas marcados como enviados automaticamente serão concluídos, ignorando o status \"enviado\"" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Compras" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Compra" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "Editar Pedidos de Compra Concluídos" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Permitir a edição de pedidos de compras após serem enviados ou concluídos" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "Converter Moeda" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "Converter valor de item para moeda base quando receber o estoque" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "Completar automaticamente os pedidos de Compra" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Marcar automaticamente os pedidos de compra como concluídos quando todos os itens de linha forem recebidos" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Ativar senha esquecida" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "Ativar a função \"Esqueci minha senha\" nas páginas de acesso" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Ativar cadastro" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "Ativar auto-registro para usuários na página de entrada" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "Ativar SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "Ativar SSO na página de acesso" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "Ativar registro SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Ativar auto-registro via SSO para usuários nas páginas de login" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "Ativar sincronização de grupo SSO" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Ativar sincronização de grupos do InvenTree com grupos fornecidos pelo IdP" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "Chave de grupo SSO" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "O nome dos grupos reivindicam o atributo fornecido pelo IdP" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "Mapa do grupo SSO" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Um mapeamento de grupos de SSO para grupos locais de InvenTree. Se o grupo local não existir, será criado." -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "Remover grupos fora do SSO" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Se os grupos atribuídos ao usuário devem ser removidos somente se eles não são o backend pelo IdP. Pois, essa configuração desabilitada pode causar problemas de segurança" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "Email obrigatório" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "Exigir do usuário o e-mail no cadastro" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "Auto-preencher usuários SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "Preencher automaticamente os detalhes do usuário a partir de dados da conta SSO" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "Enviar email duplo" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "Ao se registrar, peça aos usuários duas vezes por seus e-mails" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Senha duas vezes" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "No registro pedir aos usuários duas vezes pela senha" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "Domínios permitidos" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Restringir registros a certos domínios (separados por vírgula, começando com @)" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "Grupo no cadastro" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Grupo ao qual novos usuários serão atribuídos ao registro. Se a sincronização de grupo SSO estiver ativada, este grupo só estará definido se nenhum grupo puder ser atribuído a partir do IdP." -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "Forçar AMF" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "Os usuários devem usar uma segurança multifatorial." -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "Verificar extensões na inicialização" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Checar que todas as extensões instaladas no início — ativar em ambientes de contêineres" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "Verificar por atualizações de extensão" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "Ativar verificações periódicas de atualizações para a extensão instalados" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "Ativar integração URL" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "Ativar extensão para adicionar rotas URL" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "Ativar integração de navegação" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "Ativar extensões para integrar à navegação" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "Ativar integração com aplicativo" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "Ativar extensões para adicionar aplicativos" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "Ativar integração com agendas" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "Ativar extensões para executar tarefas agendadas" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "Ativar integração de eventos" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "Ativar extensões para responder a eventos internos" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "Ativar integração de interface" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "Ativar extensões para integrar na interface do usuário" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "Ativar integração com o e-mail" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Ativar extensão para processar e-mails de saída/entrada" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "Ativar códigos de projeto" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "Ativar códigos de projeto para rastrear projetos" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "Ativar funcionalidade para gravação de níveis e valor de estoque históricos" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "Excluir Locais Externos" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "Período de contagem automática" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "Exibir nomes completos dos usuários" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "Exibir nomes completos dos usuários em vez de nomes de usuários" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "Exibir Perfis de Usuário" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "Exibir Perfis de Usuários em sua página de perfil" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "Ativar Dados da Estação de Teste" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "Ativar coleção de dados da estação de teste para resultados de teste" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "A peça está ativa" msgid "Manufacturer is Active" msgstr "Fabricante está ativo" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "A peça do Fornecedor está ativa" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "A peça interna está ativa" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "O fornecedor está Ativo" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Fabricante" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Empresa" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "Tem estoque" @@ -4071,7 +4103,7 @@ msgstr "CNPJ" msgid "Company Tax ID" msgstr "CNPJ da empresa" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Endereço" @@ -4163,7 +4195,7 @@ msgstr "Notas de envio para uso interno" msgid "Link to address information (external)" msgstr "Link para as informações do endereço (externo)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Fabricante da peça" @@ -4181,12 +4213,12 @@ msgstr "Selecionar peça" msgid "Select manufacturer" msgstr "Selecionar fabricante" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "NPF" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Número de Peça do Fabricante" @@ -4210,8 +4242,8 @@ msgstr "Unidades de pacote devem ser maior que zero" msgid "Linked manufacturer part must reference the same base part" msgstr "Parte do fabricante vinculado deve fazer referência à mesma peça base" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Fornecedor" msgid "Select supplier" msgstr "Selecione o fornecedor" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Unidade de reserva de estoque fornecedor" @@ -4258,8 +4290,8 @@ msgstr "preço base" msgid "Minimum charge (e.g. stocking fee)" msgstr "Taxa mínima (ex.: taxa de estoque)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Embalagem" @@ -4307,14 +4339,18 @@ msgstr "Moeda padrão utilizada para este fornecedor" msgid "Company Name" msgstr "Nome da Empresa" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Em Estoque" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Ocorreu um erro ao exportar os dados" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "A coluna já está mapeada a um campo de banco de dados" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "O campo já está mapeado para uma coluna de dados" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "Mapeamento de coluna deve ser ligado a uma sessão de importação válida" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "A coluna não existe no arquivo de dados" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "O campo não existe no modelo de destino" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "O campo selecionado é somente leitura" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Importar Sessão" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Campo" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Coluna" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Índice de fileira" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Dados da linha original" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Erros" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Válido" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "Número de cópias para cada rótulo" msgid "Connected" msgstr "Conectado" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Desconhecido" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "Referência do Pedido" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Pendente" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "Tem Preço" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Concluído Antes" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Concluído Após" @@ -4779,17 +4815,17 @@ msgstr "Concluído Após" msgid "External Build Order" msgstr "Pedido de Produção Vencido" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "Pedido" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Pedido Completo" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Peça Interna" @@ -4797,27 +4833,27 @@ msgstr "Peça Interna" msgid "Order Pending" msgstr "Pedido pendente" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Concluído" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Possui Envio" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Pedido de Compra" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "Pedido de Compra" msgid "Sales Order" msgstr "Pedido de Venda" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Descrição do pedido (opcional)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "Selecione o código do projeto para este pedido" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "Link para página externa" @@ -4886,7 +4922,7 @@ msgstr "Data inicial" msgid "Scheduled start date for this order" msgstr "Data de início programada para esta encomenda" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data Prevista" @@ -4919,413 +4955,421 @@ msgstr "Ponto de contato para este pedido" msgid "Company address for this order" msgstr "Endereço da empresa para este pedido" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "Referência do pedido" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Situação" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "Estado do pedido" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "Empresa da qual os itens estão sendo encomendados" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "Referencia do fornecedor" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "Código de referência do pedido fornecedor" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "recebido por" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "Dia que o pedido foi concluído" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "Destino" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "Destino para os itens recebidos" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "Fornecedor de peça deve corresponder a fornecedor da OC" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "Quantidade deve ser um número positivo" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "Empresa para qual os itens foi vendidos" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "Situação do Pedido de Venda" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "Referência do Cliente " -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "Código de Referência do pedido do cliente" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "Data de envio" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "enviado por" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "O pedido já está completo" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "O pedido já está cancelado" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "Apenas um pedido aberto pode ser marcado como completo" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Pedido não pode ser concluído, pois, há envios incompletos" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "O pedido não pode ser concluído, pois, há alocações incompletas" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "O pedido não pode ser concluído, pois, há itens de linha incompletos" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "O pedido está bloqueado e não pode ser modificado" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "Quantidade do item" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1822 msgid "Line item reference" msgstr "Referência do Item em Linha" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "Observações do Item de Linha" -#: order/models.py:1822 +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Data limite para este item de linha (deixe em branco para usar a data limite do pedido)" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "Descrição do item de linha (opcional)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "Contexto adicional para esta linha" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "Preço Unitário" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "Item de linha de pedido de compra" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "A peça do fornecedor deve corresponder ao fornecedor" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "Pedido de produção deve ser marcada como externa" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "Os pedidos de produção só podem ser vinculados a partes de montagem" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "Criar parte do pedido deve combinar a parte do item de linha" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "Fornecedor da Peça" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "Recebido" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "Número de itens recebidos" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Preço de Compra" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "Preço unitário de compra" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "Pedido de produção externa para ser preenchida por este item de linha" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "Linha Extra do Pedido de Compra" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "Item de Linha de Pedido de Vendas" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "Apenas peças vendáveis podem ser atribuídas a um pedido de venda" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Preço de Venda" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "Preço de venda unitário" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Enviado" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "Quantidade enviada" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "Envio do Pedido de Venda" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "Data do envio" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "Data de Entrega" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "Data da entrega do envio" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "Verificado por" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "Usuário que verificou este envio" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envio" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "Número do Envio" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "Número de rastreio" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "Informação de rastreamento" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "Quantidade alocada deve ser maior que zero" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Linha" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "Item" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5372,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Duplicar Pedido" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "ID do pedido inválido" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "O pedido não pode ser cancelado" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Mesclar Itens" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Código (SKU)" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Número Interno da Peça" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Nome Interno da Peça" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Código de barras lido" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Código de barras já está em uso" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Itens Alocados" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Os seguintes números de série não estão disponíveis" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5797,7 +5841,7 @@ msgstr "Palavras-chave padrão para peças nesta categoria" msgid "Icon" msgstr "Ícone" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ícone (opcional)" @@ -5818,7 +5862,7 @@ msgstr "Valor Padrão" msgid "Default Parameter Value" msgstr "Valor Padrão do Parâmetro" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Peças" @@ -5933,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "Categoria da Peça" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "" @@ -5966,7 +6010,7 @@ msgstr "Validade Padrão" msgid "Expiry time (in days) for stock items of this part" msgstr "Validade (em dias) para itens do estoque desta peça" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Estoque Mínimo" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Itens de Estoque" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Estoque Total" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Estoque Inicial" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Atualizar" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Ignorar Linhas Inválidas" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Habilite essa opção para ignorar linhas inválidas" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "Margem" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "Paisagem" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Filtros" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "Arquivo Modelo" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "Mesclar" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Largura [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "Largura da Etiqueta, em mm" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Altura [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "Altura da Etiqueta, em mm" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8583,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8696,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Nome de usuário" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Primeiro Nome" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Primeiro nome do usuário" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Sobrenome" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Sobrenome do usuário" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Endereço de e-mail do usuário" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:240 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superusuário" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Somente um superusuário pode ajustar este campo" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "Senha" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Senha do usuário" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "Você não tem permissão para criar usuários" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Sua conta foi criada." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Bem-vindo(a) ao InvenTree" diff --git a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po index 05bea8ac17..b92125d40b 100644 --- a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -49,7 +49,7 @@ msgstr "Nu sunt furnizate date" msgid "This field must be unique." msgstr "Acest câmp trebuie să fie unic." -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Utilizatorul nu are permisiunea de a vedea acest model" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Nu s-a putut converti {original} în {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Cantitate furnizata nevalida" @@ -104,13 +104,13 @@ msgstr "Enter Date" msgid "Invalid decimal value" msgstr "Valoare zecimală nevalidă" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Notițe" @@ -123,75 +123,91 @@ msgstr "Valoarea '{name}' nu apare în formatul modelului" msgid "Provided value does not match required pattern: " msgstr "Valoarea furnizată nu se potrivește cu modelul necesar: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Nu se pot serializa mai mult de 1000 de elemente odată" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Golire șir de numere de serie" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Număr de serie duplicat" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Grup nevalid: {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Interval de grup {group} depășește cantitatea permisă ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Niciun număr de serie găsit" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Numărul unic de numere de serie ({n}) trebuie să corespundă cu cantitatea ({q})" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Elimină tag-urile HTML din această valoare" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "Datele conţin conţinut de marcaje interzis" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Eroare de conexiune" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Serverul a răspuns cu un cod de stare invalid" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Excepție apărută" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Serverul a răspuns cu o valoare de Content-Length invalidă" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Dimensiunea imaginii este prea mare" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Descărcarea imaginii a depăşit dimensiunea maximă" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Serverul la distanță a returnat un răspuns gol" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "URL-ul furnizat nu este un fișier imagine valid" @@ -199,7 +215,7 @@ msgstr "URL-ul furnizat nu este un fișier imagine valid" msgid "Log in to the app" msgstr "Conectați-vă la aplicație" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-mail" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Alegere invalidă" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nume" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Descriere" msgid "Description (optional)" msgstr "Descriere (opțional)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Cale" @@ -320,51 +336,51 @@ msgstr "A fost înregistrată o eroare de către server." msgid "Image" msgstr "Imagine" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Trebuie sa fie un număr valid" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Monedă" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Selectați moneda din opțiunile disponibile" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Acest câmp nu poate fi null." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Valoare invalidă" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Imagini de la distanţă" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL-ul imaginii la distanţă" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Descărcarea imaginilor din URL-ul de la distanţă nu este activată" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Descărcarea imaginii din URL-ul de la distanță a eșuat" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "Format de tip de conținut nevalid" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "Tipul de conținut nu a fost găsit" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "Tipul de conținut nu se potrivește cu mixin necesar clasei" @@ -520,11 +536,11 @@ msgstr "Chineză (simplificată)" msgid "Chinese (Traditional)" msgstr "Chineză (tradițională)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Actualizare disponibilă" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "O actualizare pentru InvenTree este disponibilă" @@ -536,7 +552,7 @@ msgstr "Unitate fizică nevalidă" msgid "Not a valid currency code" msgstr "Nu este un cod valutar valid" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Starea comenzii" @@ -545,21 +561,21 @@ msgstr "Starea comenzii" msgid "Parent Build" msgstr "Construcție părinte" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "İnclude variante" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "İnclude variante" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "İnclude variante" msgid "Part" msgstr "Piesă" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categorie" @@ -653,16 +669,16 @@ msgstr "Exclude arbore" msgid "Build must be cancelled before it can be deleted" msgstr "Construcția trebuie anulată înainte de a putea fi ștearsă" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Consumabile" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Opţional" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Asamblate" @@ -671,32 +687,32 @@ msgstr "Asamblate" msgid "Tracked" msgstr "Urmarit" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testabilă" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Comandă restantă" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Alocate" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Consumat" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponibil" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Pe comandă" @@ -704,26 +720,26 @@ msgstr "Pe comandă" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Comenzi de Producție" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Locatie" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Ieșire" @@ -767,8 +783,8 @@ msgstr "Data țintă trebuie să fie după data de început" msgid "Build Order Reference" msgstr "Referință comandă producție" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Referință comandă de vânzare" msgid "Sales Order to which this build is allocated" msgstr "Comanda de vânzare pentru care această construcție este alocată" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Locație sursă" @@ -845,16 +861,16 @@ msgstr "Stare producției" msgid "Build status code" msgstr "Cod status producție" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Cod lot" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Cod de lot pentru această producție" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Data creării" @@ -875,7 +891,7 @@ msgstr "Data finalizării țintă" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Data țintă pentru finalizarea construcției. Construcția va fi depășită după această dată." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Data completării" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Prioritatea acestei comenzi de producție" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Cod proiect" @@ -948,7 +964,7 @@ msgstr "A fost finalizată o comandă de producție {build}" msgid "A build order has been completed" msgstr "A fost finalizată o comandă de producție" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Numerele de serie trebuie furnizate pentru piesele urmăribile" @@ -964,23 +980,23 @@ msgstr "Construcția este deja finalizată" msgid "Build output does not match Build Order" msgstr "Construcția nu se potrivește cu Comanda de producție" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Cantitatea trebuie să fie mai mare decât zero" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Cantitatea nu poate fi mai mare decât cantitatea de ieşire" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "Construcția nu a trecut toate testele necesare" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Construcția {serial} nu a trecut toate testele necesare" @@ -1001,10 +1017,10 @@ msgstr "Element linie comandă de producție" msgid "Build object" msgstr "Construiește obiectul" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Construiește obiectul" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "Cantitatea trebuie sa fie 1 pentru stoc serializat" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Cantitate alocata ({q}) nu trebuie sa depaseasca cantitatea disponibila de stoc ({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "Articolul din stoc este supra alocat" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Articol Stoc" @@ -1083,378 +1099,378 @@ msgstr "Destinație articol in stoc" msgid "Build Level" msgstr "Nivel de construcție" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Numele Piesei" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Rezultat de construcție" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Producția nu corespunde cu producția-mamă" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Componenta de ieșire nu corespunde componentei din comanda de producție" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Această producție este deja finalizată" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Această producție nu este alocată integral" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Introduceți cantitatea pentru producția de ieșire" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Număr de serie" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Nu este permisă" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Acceptați nealocat" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Acceptați Incomplet" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Linie de construcție" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Rezultatul construirii" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Locația stocului de unde vor fi procurate piesele (lăsați necompletat pentru a prelua piesele din orice locație)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Nume piesă BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Producție" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Nume Categorie Piesă" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "În Producţie" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Stoc extern" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Stoc disponibil" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Stoc de înlocuire disponibil" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "Suspendat" msgid "Cancelled" msgstr "Anulat" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "Comandă de producție restantă" msgid "Build order {bo} is now overdue" msgstr "Comanda de producție {bo} este în întârziere" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1534,11 +1550,11 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Etichetă Cod Proiect" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "" @@ -1600,7 +1616,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Utilizator" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Preț" @@ -1633,10 +1649,10 @@ msgstr "Punctul final la care acest webhook este primit" msgid "Name for this webhook" msgstr "Nume pentru acest webhook" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Activ" @@ -1660,11 +1676,11 @@ msgstr "Secret" msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "" @@ -1714,7 +1730,7 @@ msgstr "Titlu" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Autor" msgid "Summary" msgstr "Rezumat" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Citit" @@ -1797,7 +1813,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "Numele statului" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "" @@ -1998,334 +2014,334 @@ msgstr "" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "Descrierea parametrului" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Numele acțiunii" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Nume funcție" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Nume fișier" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Nume Instanţă Server" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Utilizaţi numele instanţei" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Denumire companie" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "Versiune Componente" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "Șablon Cod lot" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "Șablon pentru generarea codurilor de lot implicite pentru elementele de stoc" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "Necesită Titularul Responsabil" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "Titularul responsabil trebuie să fie atribuit fiecărei comenzi" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "Comenzi externe de producție" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Blochează până la trecerea testelor" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Previne ca ieșirile de construcție să fie finalizate până când toate testele necesare trec" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Comenzile de vânzare marcate ca expediate vor fi finalizate automat, ocolind starea \"expediate\"" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Activează parola uitată" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "Activare parolă uitată funcție pe paginile de autentificare" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Parola de două ori" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "La înscriere, cere de două ori parola lor" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "Afișează numele complet al utilizatorilor în loc de nume de utilizator" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "" @@ -4163,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4181,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4210,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4258,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4307,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "Id comandă" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4797,27 +4833,27 @@ msgstr "" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Descrierea comenzii (opțional)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4919,413 +4955,421 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "" -#: order/models.py:1800 -msgid "Line item reference" +#: order/models.py:1814 +msgid "Line Number" msgstr "" -#: order/models.py:1807 -msgid "Line item notes" +#: order/models.py:1815 +msgid "Line number for this item (optional)" msgstr "" #: order/models.py:1822 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1829 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "Descrierea elementului de rând (opțional)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5372,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Introduceți codul lotului pentru articolele din stoc primite" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5797,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5818,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5933,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Versiunea" @@ -5966,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Versiunea" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "Descrierea piesei" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "Descrierea șablonului" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "Număr versiune (creșteri automate)" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "Descrierea detaliată a fișierului" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "Descriere fișier Asset" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8583,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Codul lotului pentru acest element din stoc" @@ -8696,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Nume utilizator" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Prenumele" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Prenumele utilizatorului" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:240 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "Parolă" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Parolă pentru utilizator" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Suprascrie avertismentul cu privire la regulile parolei" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Vă rugăm să utilizați funcția de resetare a parolei pentru a vă autentifica" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po index 49a207aac5..8073b73f0f 100644 --- a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -49,7 +49,7 @@ msgstr "Данные не предоставлены" msgid "This field must be unique." msgstr "Поле должно быть уникальным." -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "У пользователя недостаточно прав для просмотра этой модели!" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Невозможно преобразовать {original} в {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "недопустимое количество" @@ -104,13 +104,13 @@ msgstr "Введите дату" msgid "Invalid decimal value" msgstr "Не верное десятичное значение" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Заметки" @@ -123,75 +123,91 @@ msgstr "Значение '{name}' отсутствует в формате ша msgid "Provided value does not match required pattern: " msgstr "Предоставленное значение не соответствует требуемому формату: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Одновременно можно сериализовать только 1000 элементов" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Пустая строка серийного номера" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Повторяющийся серийный номер" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Недопустимая группа: {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Диапазон группы {group} превышает допустимое количество ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Серийных номеров не найдено" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Количество уникальных серийных номеров ({n}) должно быть равно ({q})" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Удалить HTML теги из этого значения" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "Данные содержат недопустимую разметку" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Ошибка соединения" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Сервер ответил неверным кодом статуса" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Произошло исключение" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Сервер ответил неверным значением Контент-Длина" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Изображение слишком большое" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Загрузка изображения превышен максимальный размер" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Удаленный сервер вернул пустой ответ" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Предоставленный URL не является допустимым файлом изображения" @@ -199,7 +215,7 @@ msgstr "Предоставленный URL не является допусти msgid "Log in to the app" msgstr "Войти в приложение" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Электронная почта" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Неверный выбор" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Название" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Описание" msgid "Description (optional)" msgstr "Описание (необязательно)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Путь" @@ -320,51 +336,51 @@ msgstr "Сервер зарегистрировал ошибку." msgid "Image" msgstr "Изображение" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Должно быть действительным номером" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Валюта" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Выберите валюту из доступных вариантов" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Это поле не может быть пустым." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Неверное значение" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Удаленное изображение" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "ССЫЛКА файла изображения на удаленном сервере" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Загрузка изображений с удаленного URL-адреса не включена" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Не удалось загрузить изображение из URL адреса" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "Неверный формат типа содержимого" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "Тип содержимого не найден" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "Тип содержимого не соответствует требуемому классу миксина" @@ -520,11 +536,11 @@ msgstr "Китайский (Упрощенный)" msgid "Chinese (Traditional)" msgstr "Китайский (Традиционный)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Доступно обновление" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "Доступно обновление для InvenTree" @@ -536,7 +552,7 @@ msgstr "Неверная физическая единица" msgid "Not a valid currency code" msgstr "Неверный код валюты" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Статус заказа" @@ -545,21 +561,21 @@ msgstr "Статус заказа" msgid "Parent Build" msgstr "Родительский заказ на производство" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Включая варианты" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "Включая варианты" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "Включая варианты" msgid "Part" msgstr "Деталь" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Категория" @@ -653,16 +669,16 @@ msgstr "Исключить дерево" msgid "Build must be cancelled before it can be deleted" msgstr "Заказ на производство должен быть отменен перед удалением" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Расходник" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Необязательно" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Сборная деталь" @@ -671,32 +687,32 @@ msgstr "Сборная деталь" msgid "Tracked" msgstr "Отслеживается" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Тестируемая" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Невыполненные заказы" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Зарезервировано" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Потреблено" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Доступно" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "В заказе" @@ -704,26 +720,26 @@ msgstr "В заказе" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Заказ на производство" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Расположение" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Выход" @@ -767,8 +783,8 @@ msgstr "Целевая дата должна быть после даты нач msgid "Build Order Reference" msgstr "Ссылка на заказ на производство" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Ссылка на заказ" msgid "Sales Order to which this build is allocated" msgstr "Заказ на продажу, которому принадлежит этот заказ на производство" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Место хранения комплектующих" @@ -845,16 +861,16 @@ msgstr "Статус заказа на производство" msgid "Build status code" msgstr "Код статуса заказа на производство" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Код партии" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Код партии для продукции" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Дата создания" @@ -875,7 +891,7 @@ msgstr "Целевая дата завершения" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Целевая дата для заказа на производства. Заказ будет просрочен после этой даты." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Дата завершения" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Приоритет этого заказа на производство" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Код проекта" @@ -948,7 +964,7 @@ msgstr "Заказ на производство {build} был завершен msgid "A build order has been completed" msgstr "Заказ на производство был завершен" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Для отслеживаемых деталей должны быть указаны серийные номера" @@ -964,23 +980,23 @@ msgstr "Продукция уже произведена" msgid "Build output does not match Build Order" msgstr "Продукция не совпадает с заказом на производство" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Количество должно быть больше нуля" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Количество не может быть больше количества продукции" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "Выход сборки не прошёл все необходимые тесты" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Сборка {serial} не прошла все необходимые тесты" @@ -1001,10 +1017,10 @@ msgstr "Номер позиции для производства" msgid "Build object" msgstr "Объект производства" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Объект производства" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "Количество должно быть 1 для сериализов msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Резервируемое количество ({q}) не должно превышать доступное количество на складе ({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "Складская позиция перераспределена" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Складская позиция" @@ -1083,378 +1099,378 @@ msgstr "Целевая складская позиция" msgid "Build Level" msgstr "Уровень сборки" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Наименование детали" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Выход Продукции" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Продукция не совпадает с родительским заказом на производство" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Продукция не соответствует детали заказа на производство" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Эта продукция уже помечена как завершенная" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Сырье для этой продукции не полностью зарезервировано" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Введите количество продукции" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Для отслеживаемых деталей должно быть указано целочисленное количество" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Требуется целое количество, так как материал содержит отслеживаемые детали" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Серийные номера" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Введите серийные номера для продукции" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Местоположение склада для результата сборки" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Автоматически выделить серийные номера" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Автоматически зарезервировать необходимые элементы с соответствующими серийными номерами" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Следующие серийные номера уже существуют или недействительны" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Необходимо представить список выхода деталей" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Место хранения для списанной продукции" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Отменить резервирование" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Отменить все резервы запасов для списанной продукции" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Причина списания продукции" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Место хранения для завершенной продукции" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Разрешить неполное резервирование" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Завершить продукцию, даже если остатки не были полностью зарезервированы" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Израсходовать зарезервированные остатки" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Израсходовать складские позиции, которые были зарезервированы для этой продукции" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Удалить незавершенную продукцию" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Удалить всю незавершенную продукцию" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Запрещено" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Принять как поглощенный этим заказом на производство" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Отменить резерв, до завершения заказа на производство" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Перераспределенные запасы" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Как вы хотите обработать дополнительные складские позиции, назначенные для заказа на производство" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Некоторые складские позиции были перераспределены" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Разрешить не полное резервирование" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Подтвердите, что складские позиции не были полностью зарезервированы для этого заказа на производство" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Необходимые запасы не были полностью зарезервированы" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Разрешить незавершенные производимые детали" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Допустить, что требуемое кол-во продукции не завершено" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Требуемое количество деталей не было произведено" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "Производственный заказ имеет незавершённые дочерние заказы" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Заказ на производство должен быть в стадии выполнения" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Заказ на производство имеет незавершенную продукцию" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Позиция для производства" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Выход продукции" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Продукция должна указывать на тот же производство" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Позиция для производства" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part должна указывать на ту же часть, что и заказ на производство" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Элемент должен быть в наличии" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Превышено доступное количество ({q})" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Продукция должна быть указан для резервирования отслеживаемых частей" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Продукция не может быть указана для резервирования не отслеживаемых частей" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Необходимо указать резервируемые элементы" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Место хранения, где будут зарезервированы детали (оставьте пустым, чтобы забрать их из любого места)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Исключить место хранения" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Исключить складские позиции из этого выбранного места хранения" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Обменный остаток" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Складские позиции в нескольких местах могут использоваться на взаимозаменяемой основе" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Заменить остатки" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Разрешить резервирование замещающих деталей" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Необязательные элементы" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Зарезервировать необязательные позиции BOM для заказа на производство" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Ссылка на спецификацию (BOM)" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "ID детали в спецификации (BOM)" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Название детали в спецификации (BOM)" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "Установить в" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Сборка" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Деталь поставщика" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Зарезервированное количество" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Ссылка на сборку" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Название категории детали" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Отслеживание" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Унаследованные" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Есть варианты" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Позиция BOM" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "В производстве" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Запланировано к сборке" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Внешний склад" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Доступный запас" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Доступный запас заменителей" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Доступный запас вариантов" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "Потреблённое количество превышает выделенное количество" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "Дополнительные примечания по расходу запаса" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "Элемент сборки должен ссылаться на правильный заказ на сборку" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "Дублирование выделения элемента сборки" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "Строка сборки должна ссылаться на правильный заказ на сборку" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "Дублирование выделения строки сборки" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "Должен быть указан хотя бы один элемент или строка" @@ -1478,7 +1494,7 @@ msgstr "Отложен" msgid "Cancelled" msgstr "Отменён" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "Просроченный заказ сборки" msgid "Build order {bo} is now overdue" msgstr "Заказ на производство {bo} просрочен" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "Ссылка" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "Файл" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "У пользователя нет прав для удаления этих вложений" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "У пользователя нет прав на удаление этого вложения" @@ -1534,11 +1550,11 @@ msgstr "Не указаны действительные коды валют" msgid "No plugin" msgstr "Нет плагина" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Название кода проекта" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Обновлено" @@ -1600,7 +1616,7 @@ msgstr "Строка ключа должна быть уникальной" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Пользователь" msgid "Price break quantity" msgstr "Скидка распространяется на заданное количество" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Цена" @@ -1633,10 +1649,10 @@ msgstr "Конечная точка, на которой принимается msgid "Name for this webhook" msgstr "Имя для этого веб-хука" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Активный" @@ -1660,11 +1676,11 @@ msgstr "Секрет" msgid "Shared secret for HMAC" msgstr "Общий ключ для HMAC" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "ID Сообщения" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "Уникальный идентификатор этого сообщения" @@ -1714,7 +1730,7 @@ msgstr "Заголовок" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Автор" msgid "Summary" msgstr "Итого" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Читать" @@ -1797,7 +1813,7 @@ msgstr "Файл не найден" msgid "Missing external link" msgstr "Отсутствует внешняя ссылка" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "Тип модели" @@ -1833,7 +1849,7 @@ msgstr "Размер файла" msgid "File size in bytes" msgstr "Размер файла в байтах" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Указан недопустимый тип модели для вложения" @@ -1861,7 +1877,7 @@ msgstr "Логическое состояние" msgid "State logical key that is equal to this custom state in business logic" msgstr "Логическое состояние, соответствующее пользовательскому состоянию в бизнес-логике" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Значение" @@ -1874,7 +1890,7 @@ msgstr "Числовое значение, которое будет сохра msgid "Name of the state" msgstr "Название состояния" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Метка" @@ -1930,7 +1946,7 @@ msgstr "Логическое состояние должно быть из мн msgid "Name must be different from the names of the reference status" msgstr "Имя должно отличаться от имен эталонного статуса" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "Список выбора" @@ -1982,7 +1998,7 @@ msgstr "Запись по умолчанию" msgid "Default entry for this selection list" msgstr "Вариант по умолчанию для этого списка выбора" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Создано" @@ -1998,334 +2014,334 @@ msgstr "Последнее обновление" msgid "Date and time that the selection list was last updated" msgstr "Дата и время последнего обновления списка выбора" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "Вариант списка выбора" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "Варианты списка выбора" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "Список выбора, к которому относится данный вариант" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "Значение варианта списка выбора" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "Метка для элемента списка выбора" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "Описание варианта списка выбора" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "Активен ли варианта списка выбора?" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "Шаблон параметра" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "Шаблоны параметров" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "У параметров-переключателей не может быть единицы измерения" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "У параметров-переключателей не может быть вариантов" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "Варианты должны быть уникальными" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "Имя шаблона параметров должно быть уникальным" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "Тип целевой модели для этого шаблона параметра" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "Название параметра" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "Единица измерения" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "Физическая единица этого параметра" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "Описание параметра" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "Переключатель" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "Этот параметр является переключателем?" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "Варианты" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "Возможные варианты этого параметра (разделить запятой)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "Список выбора для этого параметра" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Включено" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "Включен ли этот шаблон параметра?" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "Параметр" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "Параметры" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "Недопустимое значение параметра" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Указан неверный тип модели для параметра" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "ID модели" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "ID целевой модели для этого параметра" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Шаблон" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "Шаблон параметра" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Данные" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "Значение параметра" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Заметка" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Опциональное поле записей" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "Сканирование штрихкодов" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "Данные штрихкода" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "Пользователь, который сканировал штрих-код" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "Метка времени" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "Дата и время сканирования штрих-кода" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "URL-адрес, обработавший штрихкод" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "Контекст" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "Контекстные данные для сканирования штрих-кода" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "Ответ" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "Данные ответа от сканирования штрихкода" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Результат" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "Сканирование штрихкода было успешным?" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "Произошла ошибка" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: Удаление журнала электронной почты защищено. Установите INVENTREE_PROTECT_EMAIL_LOG в False, чтобы разрешить удаление." -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "Сообщение электронной почты" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "Сообщения электронной почты" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "Объявлено" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "Отправлено" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "Неудача" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "Доставлено" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "Подтверждено" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "Входящее" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "Исходящее" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "Без ответа" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "Отслеживать доставку" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "Отслеживать прочтение" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "Отслеживать клики" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "Глобальный идентификатор" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "Идентификатор этого сообщения (может быть предоставлен внешней системой)" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "ID цепочки" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Идентификатор темы этого сообщения (может быть предоставлен внешней системой)" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "Цепочка" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "Связанная цепочка для этого сообщения" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "Приоритет" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "Цепочка электронной почты" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "Цепочки электронной почты" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Ключ" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "Уникальный ключ для этой цепочки (используется для идентификации цепочки)" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "Уникальный идентификатор этой цепочки" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "Запущено внутренне" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "Эта цепочка была начата внутри?" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "Дата и время создания цепочки" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "Дата и время последнего обновления цепочки" @@ -2375,1243 +2391,1259 @@ msgstr "Указывает, переопределена ли настройка msgid "Override" msgstr "Переопределить" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Запущен" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Ожидающие задачи" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Запланированные задания" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Невыполненные Задачи" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Код задачи" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Уникальный ID задачи" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Заблокировать" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Время блокировки" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Название задачи" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Функция" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Имя функции" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Аргументы" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Аргументы задачи" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Именованные аргументы" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Именованные аргументы задачи" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Имя файла" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Тип модели" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Пользователь не имеет разрешения создавать или редактировать вложения для этой модели" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "У пользователя нет разрешения на создание или редактирование параметров для этой модели" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Список выбора заблокирован" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Нет группы" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "URL сайта заблокирован настройками" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Требуется перезапуск" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Настройки были изменены, что требует перезапуска сервера" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Ожидаемые миграции" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Количество ожидаемых миграций базы данных" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Активные коды предупреждений" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "Словарь активных кодов предупреждений" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "Идентификатор экземпляра" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Уникальный идентификатор для этого экземпляра InvenTree" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "ID объявления" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Сообщить ID экземпляра сервера в информации о состоянии сервера (без аутентификации)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Название сервера" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Текстовое описание сервера" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Название инстанса" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Имя сервера в заголовке" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Ограничить отображение `О...`" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Показать `О...` только суперпользователям" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Название компании" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "Внутреннее название компании" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "Базовая ссылка" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "Базовая ссылка для экземпляра сервера" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Валюта по умолчанию" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "Выберите базовую валюту для расчета цены" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "Поддерживаемые валюты" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "Список поддерживаемых кодов валют" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "Интервал обновления курса валют" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Как часто обновлять курс валют (установите \"ноль\", чтобы выключить)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "дней" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "Плагин обновления валют" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "Модуль обновления валюты" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "Скачать по ссылке" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "Разрешить загрузку удаленных изображений и файлов по внешнему URL" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "Ограничение размера загрузки" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "Максимально допустимый размер загрузки для удалённого изображения" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "User-Agent, используемый для загрузки из URL" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Позволяет переопределить user-Agent, используемый для загрузки изображений и файлов с внешнего URL (оставьте пустым по умолчанию)" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "Строгая проверка URL-адреса" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "Требуется спецификация схемы при проверке URL-адресов" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "Интервал проверки обновлений" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "Как часто проверять наличие обновлений (установите ноль чтобы выключить)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Автоматическое резервное копирование" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "Включить автоматическое резервное копирование базы данных и медиа-файлов" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "Интервал резервного копирования" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "Укажите количество дней между событиями автоматического резервного копирования" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "Интервал удаления задачи" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "Результаты фоновых задач будут удалены после указанного количества дней" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "Интервал удаления журнала ошибок" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "Журналы ошибок будут удалены после указанного количества дней" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "Интервал удаления уведомления" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "Уведомления пользователя будут удалены после указанного количества дней" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "Интервал удаления электронной почты" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "Сообщения электронной почты будут удалены через указанное количество дней" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "Защитить журнал электронной почты" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "Предотвращать удаление записей журнала электронной почты" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Поддержка штрих-кодов" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "Включить поддержку сканера штрих-кодов в веб-интерфейсе" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "Сохранять результаты сканирования штрихкодов" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "Сохранять результаты сканирования штрихкодов в базе данных" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "Максимальное количество сохранённых сканирований штрихкодов" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "Максимальное число результатов сканирования штрихкодов для хранения" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "Задержка сканирования штрих-кода" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "Время задержки обработки штрих-кода" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "Поддержка веб-камер штрих-кодов" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "Разрешить сканирование штрих-кода через веб-камеру в браузере" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "Показать данные штрих-кода" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "Отображать данные штрих-кода в браузере в виде текста" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "Плагин генерации штрих-кода" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "Плагин для использования внутренней генерации данных штрих-кодов" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "Ревизия детали" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "Включить поле ревизии для элемента" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "Только ревизия сборки" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "Разрешить ревизии только для сборочных деталей" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "Разрешить удаление из заказа" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "Разрешить удаление частей, которые используются в заказе" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "Регулярное выражение IPN" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "Шаблон регулярного выражения для сопоставления IPN детали" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "Разрешить повторяющиеся IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "Разрешить нескольким элементам использовать один и тот же IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "Разрешить редактирование IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "Разрешить изменение значения IPN при редактировании детали" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "Скопировать данные BOM детали" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "Копировать данные BOM по умолчанию при дублировании детали" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "Скопировать данные параметров детали" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "Копировать данных параметров по умолчанию при дублировании детали" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "Скопировать данные тестирования детали" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "Копировать данные тестирования по умолчанию при дублировании детали" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "Скопировать параметры по шаблону категории" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "Копировать параметры по шаблону категории при создании детали" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "По умолчанию детали являются шаблонами" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "По умолчанию детали могут быть собраны из других компонентов" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Компонент" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "По умолчанию детали могут использоваться в качестве суб-компонентов" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Можно купить" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "По умолчанию детали являются отслеживаемыми" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Можно продавать" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "Детали продаются по умолчанию" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "По умолчанию детали являются отслеживаемыми" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Виртуальная" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "Детали являются виртуальными по умолчанию" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "Показывать связанные детали" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "Отображать связанные детали для элемента" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "Начальные данные о запасах" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "Разрешить создание начального запаса при добавлении новой детали" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "Исходные данные о поставщике" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Разрешить создание исходных данных о поставщике при добавлении новой детали" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "Формат отображения детали" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "Формат для отображения имени детали" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "Значок раздела по умолчанию" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "Значок категории по умолчанию (пустой означает отсутствие значка)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "Минимальные Цены Десятичные Значки" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Минимальное количество десятичных знаков при отображении данных о ценах" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "Макс. Цены десятичные знаки" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Минимальное количество десятичных знаков при отображении данных о ценах" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "Использовать цены поставщика" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Включить разницу цен поставщиков при расчетах цен" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "Изменить историю покупки" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Ценообразование по историческим заказам на поставку отменяет различия в ценах поставщиков" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "Использовать цены из складских позиций" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Использовать расценки из ручного ввода данных о запасах для расчета цен" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "Возраст цен складских позиций" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Исключить складские позиции старше указанного количества дней с расчёта цен" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "Использовать варианты цен" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "Включить разницу цен поставщиков при расчетах цен" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "Только Активные Варианты" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "Использовать только активные запчасти для расчета стоимости варианта" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "Автоматическое обновление цен" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "Автоматически обновлять цены деталей при изменении внутренних данных" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "Интервал пересчета цен" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "Количество дней до автоматического обновления цены" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Внутренние цены" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "Разрешить внутренние цены для частей" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "Переопределение внутренней цены" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "При наличии внутренних цен переопределить ценовой диапазон" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "Включить печать этикеток" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "Включить печать этикеток из веб-интерфейса" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "Изображение меток DPI" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Разрешение DPI при создании файлов изображений для печати этикеток плагинов" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Включить отчеты" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "Включить генерацию отчетов" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "Режим отладки" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "Генерировать отчеты в режиме отладки (вывод HTML)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "Журнал ошибок отчета" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "Журнал ошибок, которые возникают при создании отчетов" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Размер страницы" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "Размер страницы по умолчанию для PDF отчетов" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "Принудительное применение единиц измерения параметров" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "Если введены единицы, значения параметра должны соответствовать указанным единицам измерения" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "Глобально уникальные серийные номера" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "Серийные номера для складских позиций должны быть уникальными глобально" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "Удалить исчерпанный запас" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "Определяет поведение по умолчанию, когда складская позиция заканчивается" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "Код партии Шаблона" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "Шаблон для создания кодов партии по умолчанию для складских позиций" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "Срок годности Запасов" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "Включить функцию истечения срока годности" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "Использовать просроченные остатки в производстве" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "Разрешить продажу просроченных запасов" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "Время Залежалости Запасов" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "Количество дней перед тем как складская единица будет считаться просроченной" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "Использовать просроченные остатки в производстве" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "Разрешить использовать просроченные остатки в производстве" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "Контроль за собственными запасами" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "Разрешить владельцу контролировать расположение складов и номенклатуры" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "Значок местоположения по умолчанию" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "Значок местоположения склада по умолчанию (пустой означает отсутствие значка)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "Показать установленные складские позиции" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "Отображать установленные складские позиции в складских таблицах" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "Проверять спецификацию при установке изделий" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Установленные единица хранения должны присутствовать в спецификации для родительской детали" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "Разрешить передачу товара, отсутствующего на складе" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Разрешить перемещение товаров, которых нет на складе, между складами" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "Паттерн ссылки заказа на производство" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "Поле требуемого паттерна для создания ссылки заказа на производство" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "Требуется ответственный владелец" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "Ответственный владелец должен быть назначен для каждого заказа" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "Требовать активную деталь" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "Запрещать создание заказов на сборку для неактивных деталей" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "Требовать заблокированную деталь" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "Запрещать создание заказов на сборку для разблокированных деталей" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "Требовать валидную спецификацию" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "Запрещать создание заказов на сборку, пока спецификация не будет подтверждена" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "Требовать закрытия дочерних заказов" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "Запрещать завершение заказа на сборку, пока не закрыты все дочерние заказы" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "Сторонний заказ на сборку" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "Включить функциональность сторонних заказов на сборку" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Блокировать до прохождения тестов" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Запретить вывод сборки до тех пор, пока не пройдут все необходимые тесты" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "Включить заказы на возврат" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "Включите функцию заказа на возврат в пользовательском интерфейсе" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "Шаблон заказа на возврат товара" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "Необходимый шаблон для создания поля «Возврат заказа»" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "Редактировать завершенные возвратные заказы" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "Разрешить редактирование возвращенных заказов после их завершения" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "Шаблон заказа на возврат товара" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "Необходимый шаблон для создания поля «Возврат заказа»" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "Отгрузка по умолчанию для заказа на продажу" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "Включить создание отгрузки по умолчанию для заказов на продажу" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "Редактирование завершённых заказов на продажу" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Разрешить редактирование заказов на продажу после их отправки или завершения" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "Отгрузка требует проверки" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "Запрещать завершение отгрузок, пока товары не проверены" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "Отмечать отправленные заказы как завершённые" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Заказы на продажу, помеченные как отгруженные, будут автоматически завершены, минуя статус 'отгружено'" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "Шаблон ссылки заказа на закупку" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "Требуемый шаблон для генерации поля ссылки заказа на закупку" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "Редактировать завершённые заказы на закупку" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Разрешить редактирование заказов после их отправки или завершения" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "Конвертировать валюту" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "Преобразовывать стоимость товара в базовую валюту при поступлении на склад" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "Автоматически выполнять заказы на закупку" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Автоматически отмечать заказы на закупку как завершённые при получении всех позиций" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Включить функцию восстановления пароля" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "Включить функцию восстановления пароля на странице входа" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Разрешить регистрацию" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "Включить самостоятельную регистрацию пользователей на странице входа" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "Включить SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "Включить SSO на странице входа" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "Включить регистрацию через SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Включить самостоятельную регистрацию пользователей через SSO на странице входа" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "Включить синхронизацию групп через SSO" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Включить синхронизацию групп InvenTree с группами, предоставляемыми IdP" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "Ключ группы SSO" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Имя атрибута группы, предоставленного провайдером идентификации" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "Отображение групп SSO" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Отображение от групп SSO к локальным группам InvenTree. Если локальная группа не существует, она будет создана." -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "Удалять группы вне SSO" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Удалять ли группы, назначенные пользователю, если они не поддерживаются провайдером идентификации. Отключение этой настройки может привести к проблемам безопасности" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "Необходимо указать EMail" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "Требовать электронную почту при регистрации" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "Автозаполнение пользователей SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "Автоматически заполнять данные пользователя из аккаунта SSO" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "Написать дважды" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "При регистрации дважды спрашивать адрес электронной почты" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Пароль дважды" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "При регистрации запросить пароль у пользователей дважды" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "Разрешенные домены" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Ограничить регистрацию определёнными доменами (через запятую, начиная с @)" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "Группа при новой регистрации" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Группа, на которую назначаются новые пользователи при регистрации. Если включена синхронизация группы SSO, эта группа задается только в том случае, если ни одна группа не может быть назначена через IdP." -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "Принудительное MFA" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "Пользователи должны использовать многофакторную безопасность." -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "Включение этой настройки потребует от всех пользователей настройки многофакторной аутентификации. Все сессии будут отключены немедленно." -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "Проверять плагины при запуске" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Проверять, что все плагины установлены при запуске — включать в контейнерных средах" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "Проверка обновлений плагинов" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "Включить периодическую проверку обновлений установленных плагинов" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "Включить интеграцию URL" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "Разрешить плагинам добавлять маршруты URL" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "Включить интеграцию навигации" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "Разрешить плагинам интегрироваться в навигацию" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "Включить интеграцию приложений" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "Разрешить плагинам добавлять приложения" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "Включить интеграцию расписаний" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "Разрешить плагинам запускать запланированные задачи" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "Включить интеграцию событий" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "Разрешить плагинам реагировать на внутренние события" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "Включить интеграцию интерфейса" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "Разрешить плагинам интегрироваться в пользовательский интерфейс" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "Включить интеграцию почты" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Разрешить плагинам обрабатывать исходящую и входящую почту" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "Включить коды проекта" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "Включить коды проекта для отслеживания проектов" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "Включить инвентаризацию" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "Включить функцию записи истории уровней и стоимости запасов" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "Исключить сторонний склад" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Исключить из инвентаризации единицы хранения на внешних складах" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "Автоматический период инвентаризации" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "Кол-во дней между автоматических записей инвентаризации" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "Удалять устаревшие записи инвентаризаций" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "Удалять записи инвентаризаций старше N дней" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "Частота удаления записей инвентаризаций" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "Записи инвентаризации будут удалены после N дней" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "Удалять старые записи истории запасов" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "Удалять записи истории запасов старше указанного количества дней" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "Интервал удаления истории запасов" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "Записи истории запасов будут удалены через указанное количество дней" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "Показывать полные имена пользователей" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "Отображать полные имена пользователей вместо логинов" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "Отображать профили пользователей" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "Отображать профили пользователей на их странице профиля" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "Добавлять данные об испытательном оборудовании" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "Добавлять данные об испытательном оборудовании в результаты тестирования" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "Включить пинг машин" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Включить периодическую задачу пинга зарегистрированных машин для проверки их статуса" @@ -3956,33 +3988,33 @@ msgstr "Деталь активна" msgid "Manufacturer is Active" msgstr "Производитель активен" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Поставляемая деталь активна" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Внутренняя деталь активна" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Поставщик активен" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Производитель" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Компания" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "Есть запас" @@ -4071,7 +4103,7 @@ msgstr "Налоговый идентификатор" msgid "Company Tax ID" msgstr "Налоговый идентификатор компании" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Адрес" @@ -4163,7 +4195,7 @@ msgstr "Записи отправления для внутреннего пол msgid "Link to address information (external)" msgstr "Ссылка на адресную информацию (внешняя)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Производитель детали" @@ -4181,12 +4213,12 @@ msgstr "Выберите деталь" msgid "Select manufacturer" msgstr "Выберите производителя" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "Артикул производителя" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Артикул производителя" @@ -4210,8 +4242,8 @@ msgstr "Единицы упаковки должны быть больше ну msgid "Linked manufacturer part must reference the same base part" msgstr "Связанная деталь производителя должна ссылаться на ту же базовую деталь" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Поставщик" msgid "Select supplier" msgstr "Выберите поставщика" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Артикул поставщика" @@ -4258,8 +4290,8 @@ msgstr "базовая стоимость" msgid "Minimum charge (e.g. stocking fee)" msgstr "Минимальная плата (например, складская)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Упаковка" @@ -4307,14 +4339,18 @@ msgstr "Валюта по умолчанию для этого поставщи msgid "Company Name" msgstr "Название компании" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "На складе" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "Ценовые пороги" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Произошла ошибка при экспорте данных" @@ -4419,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "Существующий идентификатор записи в базе данных" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "Колонка уже сопоставлена с полем базы данных" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Поле уже сопоставлено с колонкой данных" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "Сопоставление столбцов должно быть связано с корректным сеансом импорта" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "Колонка не существует в файле данных" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "Поле не существует в целевой модели" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Выбранное поле доступно только для чтения" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Сессия импорта" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Поле" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Колонка" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Номер строки" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Исходные данные строки" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Ошибки" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Корректный" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "Для обновления существующих записей требуется ID." -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "Запись с указанным ID не найдена" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "Указан недействительный формат ID" @@ -4579,7 +4615,7 @@ msgstr "Количество копий для печати каждой эти msgid "Connected" msgstr "Подключен" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Неизвестно" @@ -4711,7 +4747,7 @@ msgstr "Максимальное значение для типа прогрес msgid "Order Reference" msgstr "Ссылка на заказ" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Невыполненный" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "Имеет цену" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Завершено до" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Завершено после" @@ -4779,17 +4815,17 @@ msgstr "Завершено после" msgid "External Build Order" msgstr "Сторонний заказ на сборку" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "Заказ" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Заказ выполнен" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Внутренняя деталь" @@ -4797,27 +4833,27 @@ msgstr "Внутренняя деталь" msgid "Order Pending" msgstr "Заказ в ожидании" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Завершённые" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Есть отгрузка" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Заказ на закупку" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "Заказ на закупку" msgid "Sales Order" msgstr "Заказ на продажу" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "Адрес не соответствует выбранной компа msgid "Order description (optional)" msgstr "Описание заказа (дополнительно)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "Выберите код проекта для этого заказа" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "Ссылка на внешнюю страницу" @@ -4886,7 +4922,7 @@ msgstr "Начальная дата" msgid "Scheduled start date for this order" msgstr "Запланированная начальная дата этого заказа" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Целевая дата" @@ -4919,413 +4955,421 @@ msgstr "Контактное лицо по данному заказу" msgid "Company address for this order" msgstr "Адрес компании по этому заказу" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "Ссылка на заказ" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Статус" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "Статус заказа на закупку" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "Компания, в которой детали заказываются" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "Номер у поставщика" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "Номер заказа у поставщика" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "получил" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "Дата завершения заказа" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "Место хранения" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "Место хранения для полученных позиций" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "Поставщик детали должен совпадать с поставщиком заказа на закупку" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "Позиция не соответствует заказу на закупку" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "В позиции отсутствует связанная деталь" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "Количество должно быть положительным числом" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Покупатель" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "Компания, которой детали продаются" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "Статус заказа на продажу" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "Ссылка клиента" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "Код ссылки на заказ клиента" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "Дата отгрузки" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "Отправлено" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "Заказ уже выполнен" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "Заказ уже отменен" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "Только открытый заказ может быть отмечен как завершённый" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Заказ не может быть завершён, так как есть незавершённые отгрузки" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Заказ не может быть завершён, так как есть незавершённые распределения" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "Заказ не может быть завершён, так как есть незавершённые позиции" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "Заказ заблокирован и не может быть изменён" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "Количество" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1822 msgid "Line item reference" msgstr "Номер позиции" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "Записи о позиции" -#: order/models.py:1822 +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Целевая дата этой позиции (оставьте пустой, чтобы использовать целевую дату заказа)" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "Описание позиции (необязательно)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "Дополнительный контекст для этой строки" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "Цена за единицу" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "Позиция заказа на закупку" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "Поставляемая деталь должна соответствовать поставщику" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "Заказ на сборку должен быть отмечен как внешний" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "Заказы на сборку могут быть связаны только со сборочными деталями" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "Деталь заказа на сборку должна соответствовать детали позиции" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "Деталь поставщика" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "Получено" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "Количество полученных предметов" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Закупочная цена" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "Закупочная цена" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "Внешний заказ на сборку, который будет выполнен этой позицией" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "Дополнительная позиция заказа на закупку" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "Позиция заказа на продажу" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "Только продаваемые детали могут быть назначены заказу на продажу" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Цена продажи" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "Цена последней продажи" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Доставлен" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "Отгруженное кол-во" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "Отгрузка заказа на продажу" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "Адрес отгрузки должен соответствовать клиенту" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "Адрес доставки для этой отгрузки" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "Дата отправления" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "Дата доставки" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "Дата доставки отгрузки" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "Проверн" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "Пользователь, проверивший эту отгрузку" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Отправление" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "Номер отправления" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "Номер отслеживания" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "Информация об отслеживании доставки" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "Номер счета" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "Номер ссылки на связанную накладную" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "Отгрузка уже отправлена" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "Отправка не имеет зарезервированных складских позиций" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "Отгрузка должна быть проверена, прежде чем её можно завершить" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "Дополнительная позиция заказа на продажу" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "Распределение заказа на продажу" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "Складская позиция не была назначена" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "Невозможно зарезервировать складскую позицию в позицию другой детали" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "Невозможно распределить запас к позиции без детали" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Количество распределения не может превышать количество на складе" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "Резервируемое количество должно быть больше нуля" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Количество должно быть 1 для сериализированных складских позиций" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "Заказ на продажу не соответствует отгрузке" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Отгрузка не соответствует заказу на продажу" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Строка" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "Ссылка на отгрузку заказа на продажу" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "Элемент" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "Выберите складскую позицию для резервирования" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "Укажите резервируемое количество" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "Ссылка на заказ на возврат" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "Компания, из которой возвращаются товары" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "Статус заказа на возврат" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "Позиция заказа на возврат" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "Необходимо указать складской элемент" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "Количество возврата превышает количество на складе" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "Количество возврата должно быть больше нуля" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "Недопустимое количество для серийного складского элемента" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "Выберите позицию, возвращаемую от клиента" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "Дата получения" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "Дата возврата" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "Результат" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "Результат для этой позиции" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "Стоимость, связанная с возвратом или ремонтом этой позиции" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "Дополнительная позиция заказа на возврат" @@ -5353,7 +5397,7 @@ msgstr "Копировать дополнительные позиции" msgid "Copy extra line items from the original order" msgstr "Копировать дополнительные позиции из исходного заказа" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Скопировать параметры" @@ -5372,216 +5416,216 @@ msgstr "Позиции" msgid "Completed Lines" msgstr "Завершённые позиции" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Дублировать заказ" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Указать параметры для дублирования этого заказа" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "Недействительный ID заказа" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Имя поставщика" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Заказ не может быть отменён" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Разрешить закрывать заказ с незавершёнными позициями" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "В заказе есть незавершённые позиции" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Заказ не открыт" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Автоматическая цена" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Автоматически рассчитывать закупочную цену на основе данных детали поставщика" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Валюта заказа на закупку" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Объединять элементы" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Объединять в одну позицию элементы, у которых одинаковая деталь, место хранения и целевая дата" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Артикул" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Внутренний артикул детали" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Внутреннее название детали" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Необходимо указать поставляемую деталь" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Необходимо указать заказ на закупку" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Поставщик должен соответствовать заказу на закупку" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Заказ на закупку должен соответствовать поставщику" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Позиция" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Выберите место назначения для полученных элементов" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Введите код партии для поступающих складских позиций" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Истекает" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Введите дату истечения срока годности для поступающих складских единиц" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Введите серийные номера для входящих складских позиций" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Переопределить информацию об упаковке для поступающих складских единиц" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Дополнительная заметка для поступающих складских единиц" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Штрих-код" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Сканированный штрих-код" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Штрихкод уже используется" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Необходимо предоставить позиции" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Необходимо указать место назначения" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Предоставленные значения штрихкодов должны быть уникальными" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Отгрузки" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Выполненные отгрузки" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "Зарезервированные позиции" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Валюта цены продажи" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Выделенные элементы" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Информация об отгрузке не предоставлена" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Позиция не связана с этим заказом" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Количество должно быть положительным" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Введите серийные номера для резервирования" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Отгрузка уже отправлена" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Отгрузка не связана с этим заказом" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Совпадений для следующих серийных номеров не найдено" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Следующие серийные номера недоступны" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Позиция заказа на возврат" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Позиция не соответствует заказу на возврат" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Позиция уже получена" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Предметы могут быть получены только по заказам, которые находятся в процессе выполнения" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Количество для возврата" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Валюта цены позиции" @@ -5797,7 +5841,7 @@ msgstr "Ключевые слова по умолчанию для детале msgid "Icon" msgstr "Значок" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Значок (необязательно)" @@ -5818,7 +5862,7 @@ msgstr "Значение по умолчанию" msgid "Default Parameter Value" msgstr "Значение параметра по умолчанию" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Детали" @@ -5933,7 +5977,7 @@ msgstr "Ключевые слова для улучшения видимости msgid "Part category" msgstr "Категория" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Внутренний артикул" @@ -5942,7 +5986,7 @@ msgstr "Внутренний артикул" msgid "Part revision or version number" msgstr "Ревизия или серийный номер детали" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Ревизия" @@ -5966,7 +6010,7 @@ msgstr "Срок действия по умолчанию" msgid "Expiry time (in days) for stock items of this part" msgstr "Срок годности (в днях) для складских позиций этой детали" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Минимальный запас" @@ -6447,355 +6491,355 @@ msgstr "Нельзя создать отношение детали с само msgid "Duplicate relationship already exists" msgstr "Дублирующее отношение уже существует" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Родительская категория" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Родительская категория деталей" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Подкатегории" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Результаты" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Количество результатов, зарегистрированных по этому шаблону" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Валюта закупки складской позиции" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "Файл не является изображением" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Оригинальная деталь" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Выберите исходную деталь для копирования" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Копировать Изображение" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Копировать изображение из исходной детали" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Скопировать BOM" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Копировать спецификацию из исходной детали" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Копировать данные параметров из исходной детали" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Копировать Записи" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Скопировать записи из оригинальной детали" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "Копировать тесты" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "Копировать шаблоны тестов из исходной детали" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Начальное количество на складе" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Задайте начальное количество этой детали на складе. Если количество равно 0, складская позиция не будет добавлена." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Начальное местоположение запаса" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Укажите начальное местоположение запаса для этой детали" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Артикул производителя" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "Выбранная компания не является допустимым поставщиком" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "Выбранная компания не является допустимым производителем" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Деталь производителя с данным артикулом уже существует" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Деталь поставщика с данным артикулом уже существует" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Название категории" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Производится" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "Количество этой детали, находящееся в производстве" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Оставшееся количество этой детали, запланированное к сборке" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Складские позиции" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Ревизии" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Общий запас" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Нераспределённый запас" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Запас вариантов" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Дублировать деталь" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Копировать начальные данные из другой детали" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Начальный запас" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Создавать деталь с начальным количеством на складе" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Информация о поставщике" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Добавить начальную информацию о поставщике для этой детали" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Копировать параметры категории" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Копировать шаблоны параметров из выбранной категории деталей" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Существующее изображение" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Имя файла существующего изображения детали" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Файл изображения не существует" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Проверить всю спецификацию" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Можно произвести" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "Требуется для заказов на сборку" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "Выделено для заказов на сборку" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "Требуется для заказов на продажу" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "Выделено для заказов на продажу" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "Внутренний артикул детали" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "Описание детали" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "Выберите деталь (и любые её варианты) для которой сгенерировать информацию об инвентаризации" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "Выберите категорию (и любые её подкатегории) для которой сгенерировать информацию об инвентаризации" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "Выберите склад, чтобы включить все детали в наличии в указанном складе (включая подразделы)" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "Создать записи инвентаризации" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "Сохранить записи инвентаризации для выбранных деталей" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "Создать отчет" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "Создать отчёт инвентаризации для выбранных деталей" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Минимальная цена" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Переопределить рассчитанное значение минимальной цены" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Валюта минимальной цены" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Максимальная цена" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Переопределить рассчитанное значение максимальной цены" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Валюта максимальной цены" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Обновить" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Обновить цены для этой детали" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Не удалось конвертировать из предоставленных валют в {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Минимальная цена не должна превышать максимальную цену" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Максимальная цена не должна быть меньше минимальной" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Выберите родительскую сборку" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Выберите деталь, которая является компонентом" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Выберите деталь, из которой копировать спецификацию" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Удалить существующие данные" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Удалить существующие пункты спецификации перед копированием" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Включая наследуемые" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Включать пункты спецификации, унаследованные от шаблонных деталей" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Пропустить некорректные строки" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Включите эту опцию, чтобы пропускать недопустимые строки" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Копировать детали-заменители" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Копировать детали-заменители при дублировании пунктов спецификации" @@ -7516,7 +7560,7 @@ msgstr "Граница" msgid "Print a border around each label" msgstr "Печатать рамку вокруг каждой этикетки" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "Альбомная" @@ -7596,64 +7640,77 @@ msgstr "Предоставляет поддержку сканирования msgid "The Supplier which acts as 'TME'" msgstr "Поставщик, который представляет 'TME'" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Только пользователи с правами персонала могут управлять плагинами" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "Установка плагинов отключена" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Плагин успешно установлен" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Плагин установлен в {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "Плагин не найден в реестре" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "Плагин не является упакованным" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Имя пакета плагина не найдено" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Только пользователи с правами персонала могут управлять плагинами" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "Удаление плагинов отключено" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "Плагин нельзя удалить, так как он активен" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "Плагин нельзя удалить, так как он обязательный" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "Плагин нельзя удалить, так как он является образцом" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "Плагин нельзя удалить, так как он встроенный" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "Плагин не установлен" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Установка плагина не найдена" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Плагин успешно удалён" @@ -7900,55 +7957,55 @@ msgstr "Установка не подтверждена" msgid "Either packagename or URL must be provided" msgstr "Необходимо указать название пакета или URL" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Полная перезагрузка" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Выполнить полную перезагрузку реестра плагинов" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Принудительная перезагрузка" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Принудительно перезагрузить реестр плагинов, даже если он уже загружен" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Собрать плагины" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Собрать плагины и добавить их в реестр" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Активировать плагин" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Активировать этот плагин" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "Обязательный плагин нельзя деактивировать" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Удалить конфигурацию" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Удалить конфигурацию плагина из базы данных" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "Пользователь, для которого применяется эта настройка" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "Элементы" @@ -7964,7 +8021,7 @@ msgstr "Плагин не поддерживает печать этикеток msgid "Invalid label dimensions" msgstr "Недопустимые размеры этикетки" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "Ни одного допустимого элемента не предоставлено для шаблона" @@ -7988,152 +8045,156 @@ msgstr "Письмо" msgid "Template file with this name already exists" msgstr "Файл шаблона с таким именем уже существует" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "Название шаблона" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "Описание шаблона" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "Номер ревизии (автоматически)" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "Прикреплять к модели при печати" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "Сохранять отчёт как вложение к связанному экземпляру модели при печати" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "Шаблон имени файла" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "Шаблон для создания имён файлов" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "Шаблон включён" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "Тип модели шаблона" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Фильтры" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "Фильтры запроса шаблона (список ключ=значение через запятую)" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "Файл шаблона" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "Размер страницы для PDF-отчётов" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "Рендерить отчёт в альбомной ориентации" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "Объединить" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "Рендерить один отчёт по выбранным элементам" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "Отчёт, сгенерированный из шаблона {self.name}" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "Синтаксическая ошибка в шаблоне" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "Ошибка при рендеринге отчёта" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "Ошибка при генерации отчёта" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "Ошибка при объединении выводов отчётов" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Ширина [мм]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "Ширина этикетки, задаётся в миллиметрах" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Высота [мм]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "Высота этикетки, задаётся в миллиметрах" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "Ошибка при печати этикеток" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "Сниппет" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "Файл фрагмента отчёта" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "Описание файла сниппета" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "Объект" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "Файл ресурса отчёта" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "Описание медиафайла" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "Выберите шаблон отчёта" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "Список первичных ключей элементов, включаемых в отчёт" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "Выберите шаблон этикетки" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "Плагин печати" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "Выберите плагин для печати этикеток" @@ -8231,7 +8292,7 @@ msgstr "Отчет тестирования складской позиции" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Установленные элементы" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "Тег part_image требует экземпляр детали" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "Тег company_image требует экземпляр компании" @@ -8304,7 +8365,7 @@ msgstr "Фильтровать по местоположениям верхне msgid "Include sub-locations in filtered results" msgstr "Включать подместоположения в отфильтрованные результаты" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Основной склад" @@ -8388,7 +8449,7 @@ msgstr "Дата истечения до" msgid "Expiry date after" msgstr "Дата истечения после" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Залежалый" @@ -8522,7 +8583,7 @@ msgstr "Необходимо указать деталь" msgid "Stock items cannot be located into structural stock locations!" msgstr "Складские позиции не могут находиться в структурных местах хранения!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Складская позиция не может быть создана для виртуальных деталей" @@ -8567,7 +8628,7 @@ msgstr "Выберите соответствующего поставщика msgid "Where is this stock item located?" msgstr "Где находится эта складская позиция?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Упаковка этой складской позиции хранится в" @@ -8583,7 +8644,7 @@ msgstr "Установлен ли этот элемент в другой эле msgid "Serial number for this item" msgstr "Серийный номер для этого элемента" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Код партии для этой складской позиции" @@ -8696,7 +8757,7 @@ msgstr "Складская позиция в производстве" msgid "Serialized stock cannot be merged" msgstr "Серийные запасы нельзя объединить" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Дублирующие складские элементы" @@ -8820,7 +8881,7 @@ msgstr "Выберите деталь для генерации серийног msgid "Quantity of serial numbers to generate" msgstr "Количество серийных номеров для генерации" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "Шаблон теста для этого результата" @@ -8844,222 +8905,222 @@ msgstr "Родительский элемент" msgid "Parent stock item" msgstr "Родительский складской элемент" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Использовать размер упаковки при добавлении: заданное количество — это количество упаковок" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "Использовать размер упаковки" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Введите серийные номера для новых элементов" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Номер детали поставщика" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Просрочен" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Дочерние элементы" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "Отслеживание элементов" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "Закупочная цена для этой складской позиции, за единицу или за упаковку" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Введите количество складских позиций для сериализации" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "Складской элемент не предоставлен" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Количество не должно превышать доступный запас ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Целевое место хранения" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Серийные номера не могут присваиваться данной детали" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Серийные номера уже существуют" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Выберите складскую позицию для установки" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Количество для установки" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Введите количество элементов для установки" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Добавить запись к транзакции (необязательно)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "Количество для установки должно быть не менее 1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Складская позиция недоступна" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Выбранная деталь отсутствует в спецификации" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "Количество для установки не должно превышать доступное количество" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Место назначения для демонтированного элемента" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Выберите деталь в которую будет преобразована складская позиция" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "Выбранная деталь не является допустимым вариантом для преобразования" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Невозможно преобразовать складскую позицию с назначенной деталью поставщика" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Статус складской позиции" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Выберите складские позиции для изменения статуса" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Не выбрано ни одной складской позиции" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Места хранения" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Родительское местоположение запаса" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Деталь должна быть продаваемой" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Элемент распределён в заказ на продажу" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Элемент зарезервирован для заказа на производство" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Покупатель для назначения складских позиций" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "Выбранная компания не является покупателем" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Записи о назначенных запасах" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Необходимо предоставить список складских позиций" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Заметки об объединении складских позиций" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Разрешить несоответствие поставщиков" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Разрешить объединение складских позиций с различными поставщиками" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Разрешить несоответствие статусов" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Разрешить объединение складских позиций с различными статусами" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Необходимо предоставить как минимум 2 складские позиции" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Нет изменений" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Первичный ключ складского элемента" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "Складской элемент отсутствует на складе" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "Складской элемент уже на складе" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "Количество не должно быть отрицательным" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Заметки об изменении склада" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "Объединить с существующим запасом" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "Объединять возвращённые элементы с существующими складскими элементами, если возможно" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "Следующий серийный номер" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "Предыдущий серийный номер" @@ -9541,83 +9602,99 @@ msgstr "Заказы на продажу" msgid "Return Orders" msgstr "Заказы на возврат" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Логин" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Имя" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Имя пользователя" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Фамилия" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Фамилия пользователя" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Адрес электронной почты пользователя" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Персонал" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Имеет ли этот пользователь права персонала" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Суперпользователь" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Это пользователь является суперпользователем" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Активна эта учетная запись" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Только суперпользователь может изменить это поле" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "Пароль" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Пароль пользователя" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "Игнорировать предупреждение" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Игнорировать предупреждение о правилах пароля" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "У вас нет разрешения на создание пользователей" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Ваша учётная запись была успешно создана." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Пожалуйста, используйте функцию сброса пароля для входа" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Добро пожаловать в InvenTree" diff --git a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po index d6703d8007..cbda4bbfa1 100644 --- a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Slovak\n" "Language: sk_SK\n" @@ -49,7 +49,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "" @@ -104,13 +104,13 @@ msgstr "" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "" @@ -123,75 +123,91 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "" @@ -199,7 +215,7 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "" @@ -320,51 +336,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "" @@ -545,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -653,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -671,32 +687,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -704,26 +720,26 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -845,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -875,7 +891,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" @@ -948,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -964,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1001,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1083,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1534,11 +1550,11 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "" @@ -1600,7 +1616,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "" @@ -1633,10 +1649,10 @@ msgstr "" msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1660,11 +1676,11 @@ msgstr "" msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "" @@ -1714,7 +1730,7 @@ msgstr "" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "" msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "" @@ -1797,7 +1813,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "" @@ -1998,334 +2014,334 @@ msgstr "" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "" @@ -4163,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4181,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4210,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4258,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4307,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4797,27 +4833,27 @@ msgstr "" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4919,413 +4955,421 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "" -#: order/models.py:1800 -msgid "Line item reference" +#: order/models.py:1814 +msgid "Line Number" msgstr "" -#: order/models.py:1807 -msgid "Line item notes" +#: order/models.py:1815 +msgid "Line number for this item (optional)" msgstr "" #: order/models.py:1822 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1829 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5372,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5797,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5818,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5933,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "" @@ -5966,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8583,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8696,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:240 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po index 045684b0dc..0b16bdbc65 100644 --- a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Slovenian\n" "Language: sl_SI\n" @@ -49,7 +49,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Uporabnik nima dovoljenja pogleda tega modela" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Ni mogoče pretvoriti {original} v {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Podana napačna količina" @@ -104,13 +104,13 @@ msgstr "Vnesi datum" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Zapiski" @@ -123,75 +123,91 @@ msgstr "Vrednost '{name}' ni v predpisanem formatu" msgid "Provided value does not match required pattern: " msgstr "Podana vrednost se ujema s predpisanim vzorcem: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Prazno polje serijske številke" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Dvojna serijska številka" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Doseg skupine {group} presega dovoljene količine ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Serijske številke niso najdene" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Odstranite oznako HTML iz te vrednosti" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Napaka povezave" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Odziv serverja: napravilni status kode" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Pojavila se je izjema" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Odziv serverja: napačna dolžina vrednosti" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Prevelika velikost slike" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Prenos slike presegel največjo velikost" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Oddaljeni server vrnil prazen odziv" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Podani URL ni veljavna slikovna datoteka" @@ -199,7 +215,7 @@ msgstr "Podani URL ni veljavna slikovna datoteka" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-pošta" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Nedovoljena izbira" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Ime" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Opis" msgid "Description (optional)" msgstr "Opis (opcijsko)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Pot" @@ -320,51 +336,51 @@ msgstr "Zaznana napaka na strežniku." msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Mora biti veljavna številka" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Izberite valuto med razpoložljivimi možnostmi" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Neveljavna vrednost" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Oddaljena slika" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "Povezava do oddaljene slike" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Prenos slik iz oddaljene povezave ni omogočen" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "Kitajščina (poenostavljena)" msgid "Chinese (Traditional)" msgstr "Kitajščina (tradicionalno)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "Neveljavna fizična enota" msgid "Not a valid currency code" msgstr "Neveljavna oznaka valute" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "" @@ -545,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "Nadrejena izgradnja" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -653,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Izgradnja mora biti najprej preklicana, nato je lahko izbrisana" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Neobvezno" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Montaža" @@ -671,32 +687,32 @@ msgstr "Montaža" msgid "Tracked" msgstr "Sledi" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testno" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Dodeljeno" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Na voljo" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -704,26 +720,26 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Nalog izgradnje" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "Referenca naloga izgradnje" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Referenca dobavnica" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Lokacija vira" @@ -845,16 +861,16 @@ msgstr "Status izgradnje" msgid "Build status code" msgstr "Koda statusa izgradnje" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Številka serije" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Številka serije za to izgradnjo" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Datum ustvarjenja" @@ -875,7 +891,7 @@ msgstr "Rok dokončanja" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Rok končanja izdelave. Izdelava po tem datumu bo v zamudi po tem datumu." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Datom končanja" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" @@ -948,7 +964,7 @@ msgstr "Nalog izgradnje {build} je dokončan" msgid "A build order has been completed" msgstr "Nalog izgradnej dokončan" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -964,23 +980,23 @@ msgstr "Igradnja je že dokončana" msgid "Build output does not match Build Order" msgstr "Izgradnja se ne ujema s nalogom izdelave" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1001,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "Količina za zalogo s serijsko številko mora biti 1" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Prestavljena zaloga ({q}) ne sme presegati zaloge ({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "Preveč zaloge je prestavljene" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Postavka zaloge" @@ -1083,378 +1099,378 @@ msgstr "Destinacija postavke zaloge" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Izgradnja" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Izgradnja se ne ujema z nadrejeno izgradnjo" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Izhodni del se ne ujema s naročilom sestava" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Ta sestava je že zaključena" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "Preklicano" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1534,11 +1550,11 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "" @@ -1600,7 +1616,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Uporabnik" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "" @@ -1633,10 +1649,10 @@ msgstr "" msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktivno" @@ -1660,11 +1676,11 @@ msgstr "" msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "" @@ -1714,7 +1730,7 @@ msgstr "" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "" msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "" @@ -1797,7 +1813,7 @@ msgstr "Manjka datoteka" msgid "Missing external link" msgstr "Manjka zunanja povezava" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "" @@ -1998,334 +2014,334 @@ msgstr "" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Ime datoteke" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "" @@ -4163,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4181,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4210,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4258,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4307,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4797,27 +4833,27 @@ msgstr "" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4919,413 +4955,421 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "" -#: order/models.py:1800 -msgid "Line item reference" +#: order/models.py:1814 +msgid "Line Number" msgstr "" -#: order/models.py:1807 -msgid "Line item notes" +#: order/models.py:1815 +msgid "Line number for this item (optional)" msgstr "" #: order/models.py:1822 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1829 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Poslano" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "Prestavljena količina mora biti večja od 0" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5372,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5797,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5818,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5933,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "" @@ -5966,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8583,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8696,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Uporabniško ime" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Ime" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Ime uporabnika" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Priimek" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Priimek uporabnika" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Email uporabnika" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Osebje" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Ali ima ta uporabnik pravice osebja" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superuporabnik" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Ali je ta uporabnik superuporabnik" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Ali je ta račun aktiven" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Vaš račun je bil ustvarjen." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Za prijavo uporabite funkcijo ponastavitve gesla" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Dobrodošli v InvenTree" diff --git a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po index 1cdcfcc071..3cf27a2e4b 100644 --- a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Serbian (Latin)\n" "Language: sr_CS\n" @@ -49,7 +49,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Korisnik nema dozvolu za pregled ovog modela" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Nije moguće konvertovati {original} u {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Isporučena nevažeća količina" @@ -104,13 +104,13 @@ msgstr "Unesite datum" msgid "Invalid decimal value" msgstr "Neispravna decimalna vrednost" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Napomene" @@ -123,75 +123,91 @@ msgstr "Vrednost '{name}' se ne pojavljuje u formatu obrasca" msgid "Provided value does not match required pattern: " msgstr "Navedena vrednost ne odgovara traženom obrascu: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Nije moguće dati više od 1000 serijskih brojeva stavkama odjednom" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Serijski broj nije popunjen" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Dupliciraj serijski broj" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Nevažeća grupa: {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Raspon grupe {group} prelazi dozvoljenu količinu ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Nisu pronađeni serijski brojevi" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Uklonite HTML oznake iz ove vrednosti" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "Podatak sadrži zabranjen jezički sadržaj" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Greška u povezivanju" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Server je odgovorio nevažećim statusnim kodom" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Došlo je do izuzetka" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 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:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Veličina slike je prevelika" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Preuzimanje slike premašilo je maksimalnu veličinu" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Udaljeni server vratio je prazan odgovor" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Navedeni URL nije važeća slikovna datoteka" @@ -199,7 +215,7 @@ msgstr "Navedeni URL nije važeća slikovna datoteka" msgid "Log in to the app" msgstr "Prijavljivanje na aplikaciju" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-Pošta" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Nevažeći izvor" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Ime" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Opis" msgid "Description (optional)" msgstr "Opis (Opciono)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Putanja" @@ -320,51 +336,51 @@ msgstr "Server je zabležio grešku." msgid "Image" msgstr "Slika" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Mora biti važeći broj" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Odaberite valutu među dostupnim opcijama" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Nevažeća vrednost" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Udaljena slika" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL udaljene slike" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Preuzimanje slika s udaljenog URL-a nije omogućeno" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Neuspešno preuzimanje slike sa udaljene URL" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "Kineski (Uprošćeni)" msgid "Chinese (Traditional)" msgstr "Kineski (Tradicionalni)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "Nevažeća jedinica mere" msgid "Not a valid currency code" msgstr "Nevažeći kod valute" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Status naloga" @@ -545,21 +561,21 @@ msgstr "Status naloga" msgid "Parent Build" msgstr "Roditeljski proizvod" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Uključi varijante" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "Uključi varijante" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "Uključi varijante" msgid "Part" msgstr "Deo" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategorija" @@ -653,16 +669,16 @@ msgstr "Ne uključuj stablo" msgid "Build must be cancelled before it can be deleted" msgstr "Proizvod mora biti poništen pre nego što se izbriše" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Potrošni materijal" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Opciono" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Sklapanje" @@ -671,32 +687,32 @@ msgstr "Sklapanje" msgid "Tracked" msgstr "Praćeno" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Proverljivo" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Neizmirena narudžbina" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Alocirano" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Dostupno" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Po narudžbini" @@ -704,26 +720,26 @@ msgstr "Po narudžbini" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Nalog za izradu" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Lokacija" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "Reference naloga za pravljenje" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Referenca naloga za prodaju" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Lokacija izvora" @@ -845,16 +861,16 @@ msgstr "Status izgradnje" msgid "Build status code" msgstr "Kod statusa izgradnje" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Kod serije" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Kod izgradnje za ovaj izlaz" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "datum kreiranja" @@ -875,7 +891,7 @@ msgstr "Datum ciljanog završetka" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Ciljani datum za završetak izgradnje. Izgradnja će biti u prekoračenju nakon ovog datuma" -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Datum završetka" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Prioritet ovog naloga za izgradnju" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Kod projekta" @@ -948,7 +964,7 @@ msgstr "Nalog za izgradnju {build} je kompletiran" msgid "A build order has been completed" msgstr "Nalog za izgradnju je kompletiran" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Za delove koji mogu da se prate moraju se dostaviri serijski brojevi" @@ -964,23 +980,23 @@ msgstr "Izlaz izgradnje je već kompletiran" msgid "Build output does not match Build Order" msgstr "Izlaz izgradnje se ne slaže sa Nalogom za izgradnju" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Količina mora biti veća od nule" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Količina ne sme da bude veća od izlazne količine" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Izlaz izgradnje {serial} nije zadovoljio zahtevane testove" @@ -1001,10 +1017,10 @@ msgstr "Stavka porudžbine naloga za izgradnju" msgid "Build object" msgstr "Objekat izgradnje" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Objekat izgradnje" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "Količina mora da bude 1 za zalihe koje su serijalizovane" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Alocirana količina ({q}) ne sme da bude veća od količine dostupnih zaliha ({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "Stavka zaliha je prealocirana" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Stavka zaliha" @@ -1083,378 +1099,378 @@ msgstr "Stavka zaliha odredišta" msgid "Build Level" msgstr "Nivo izgradnje" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Ime dela" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Izlaz izgradnje" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Izlaz izgradnje se ne slaže sa nadređenom izgradnjom" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Izlazni deo se ne slaže sa delom Naloga za Izgradnju" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Ovaj izlaz izgradnje je već kompletiran" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Ovaj izlaz izgradnje nije u potpunosti alociran" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Unesi količinu za izlaz izgradnje" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "Brojčana količina potrebna za delove koji mogu da se prate" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Potrebna je brojčana količina, jer opis materijala sadrži delove koji se mogu pratiti" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serijski brojevi" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Unesi serijske brojeve za izlaz izgradnje" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Lokacija zaliha za izlaz izgradnje" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Automatski alociraj serijske brojeve" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatski alociraj tražene stavke sa odgovarajućim serijskim brojevima" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Sledeći serijski brojevi već postoje ili su neispravni" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Lista izlaza izgradnje se mora obezbediti" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Lokacija zaliha za otpisane izlaze" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Odbaci alokacije" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Odbaci bilo kojiu alokaciju zaliha za otpisane izlaze" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Razlog za otpisane izlaz(e) izgradnje" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Lokacija za završene izlaze izgradnje" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Prihvati nekompletirane Alokacije" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "kompletiraj izlaze ako zalihe nisu u potpunosti alocirane" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Troši alocirane zalihe" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Troši bilo koje zalihe koje su već alocirane za ovu izgradnju" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Ukloni nekompletirane izlaze" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Izbriši svei izlaze izgradnje koji nisu kompletirani" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Nije dozvoljeno" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Prihvati kao potrošeno od strane ovog naloga za izgradnju" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Izmesti bre završetka ovog naloga za izgradnju" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Sveukupne izdvojene zalihe" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Šta želite da radite sa viškom stavki u zalihama koje su dodeljene nalogu za izgradnju?" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Neke stavke zaliha su prealocirane" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Prihvati nealocirano" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Prihvati da stavke zaliha nisu u potpunosti alocirane za ovaj nalog za izgradnju" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Tražene zalihe nisu u potpunosti alocirane" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Prihvati nekompletirano" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Prihvati da je traženi broj izlaza izgradnje nekompletan" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Traženi broj izgradnji nije kompletan" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "Nalog za izgradnju ima otvoren potčinjene naloge za izgradnju" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Nalog za izgradnju mora biti u stanju produkcije" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Nalog za izgradnju ima nekompletne izlaze" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Porudžbina izgradnje" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Izlaz izgradnje" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Izlaz izgradnje mora da referencira istu izgradnju" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Stavka porudžbine za izradu" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part mora da se referencira istom delu kao u nalogu za izgradnju" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Stavka mora da bude u zalihama" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Dostupna količina ({q}) premašena" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "Izlaz izgradnje mora da određen za alokaciju praćenih delova" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Izlaz izgradnje ne može biti određen za alokaciju nepraćenih delova" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Stavke alociranja se moraju odrediti" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Lokacija zaliha koje će da budu izvor delova (ostavi prazno ukoliko uzimate sa bilo koje lokacije)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Isključi lokaciju" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Isključi stavke zaliha za ovu selektovanu lokaciju" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Zamenljive zalihe" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Stavke zaliha koje su na različitim lokacijama se mogu međusobno menjati" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Zamenske zalihe" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Dozvoli alociranje delova koji su zamenski" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Opcionalne stavke" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "Alociraj opcione BOM stavke na nalog za izgradnju" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "Referenca BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "BOM ID dela" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "BOM ime dela" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Deo dobavljača" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Alocirana količina" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Referenca izgradnje" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Ime kategorije dela" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Može da se prati" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Nasleđen" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Dozvoli varijante" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "BOM stavka" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "U proizvodnji" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Spoljašnje zalihe" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Dostupne zalihe" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Dostupne zamenske zalihe" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Dostupne varijante zaliha" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "Na čekanju" msgid "Cancelled" msgstr "Otkazano" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "Prekoračeni nalog za izgradnju" msgid "Build order {bo} is now overdue" msgstr "Nalog za izgradnju {bo} je sada prekoračen" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "je link" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "je datoteka" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "Korisnik nema potrebne dozvole da bi izbrisao ove atačmente" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Korisnik nema dozvolu da izbriše ovaj atačment" @@ -1534,11 +1550,11 @@ msgstr "Nisu obezbeđeni ispravni kodovi valuta" msgid "No plugin" msgstr "Nema dodataka" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Naziv koda projekta" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Ažurirano" @@ -1600,7 +1616,7 @@ msgstr "Tekstualni ključ mora da bude jedinstven" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Korisnik" msgid "Price break quantity" msgstr "Prelomna količina cene" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Cena" @@ -1633,10 +1649,10 @@ msgstr "Krajnja tačka na kojoj je primljen zahtev za izmenu web stranice" msgid "Name for this webhook" msgstr "Ime ovog zahteva za izmenu stranice" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktivan" @@ -1660,11 +1676,11 @@ msgstr "Tajna" msgid "Shared secret for HMAC" msgstr "Deljena tajna za HMAC" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "ID poruke" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "Jedinstveni identifikator za ovu poruku" @@ -1714,7 +1730,7 @@ msgstr "Naslov" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Autor" msgid "Summary" msgstr "Rezime" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Čitaj" @@ -1797,7 +1813,7 @@ msgstr "Nedostaje datoteka" msgid "Missing external link" msgstr "Nedostaje eksterni link" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "Veličina datoteke" msgid "File size in bytes" msgstr "Veličina datoteke u bajtovima" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Određen je neispravan tip modela za prilog" @@ -1861,7 +1877,7 @@ msgstr "Logički ključ" msgid "State logical key that is equal to this custom state in business logic" msgstr "Stanje logičkog ključa je jednako posebnom ključu u poslovnoj logici" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Vrednost" @@ -1874,7 +1890,7 @@ msgstr "Numerička vrednost koja će biti sačuvana u bazi podataka modela" msgid "Name of the state" msgstr "Ime stanja" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Etiketa" @@ -1930,7 +1946,7 @@ msgstr "Logički ključ mora biti među logičkim ključevima referentnog status msgid "Name must be different from the names of the reference status" msgstr "Naziv mora biti različit od naziva u statusu reference" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "Lista odabira" @@ -1982,7 +1998,7 @@ msgstr "Podrazumevani unos" msgid "Default entry for this selection list" msgstr "Podrazumevani unos za ovu listu odabira" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Kreirano" @@ -1998,334 +2014,334 @@ msgstr "Poslednje ažuriranje" msgid "Date and time that the selection list was last updated" msgstr "Datum i vreme kada je ova lista odabira ažurirana" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "Unos liste odabira" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "Unosi liste odabira" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "Lista odabira kojoj ovaj unos pripada" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "Vrednost ovog unosa liste odabira" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "Naziv ovog unosa liste odabira" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "Opis ovog unosa liste odabira" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "Da li je unos ove liste odabira aktivan?" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "Šablon parametra" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "Checkbox parametri ne mogu imati jedinice" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "Checkbox parametri ne mogu imati izbore" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "Izbori moraju biti jedinstveni" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "Ime šablona parametra mora biti jedinstveno" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "Naziv parametra" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "Jedinice" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "Fizičke jedinice za ovaj parametar" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "Opis parametra" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "Polje za potvrdu" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "Da li je ovaj parametar checkbox?" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "Izbori" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "Validni izbori za ovaj parametar (razdvojeni zapetom)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "Lista izbora za ovaj parametar" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Omogućen" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "Nije validan izbor za vrednost parametra" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Šablon" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Podaci" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "Vrednost parametra" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Beleška" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Opciona beleška" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "Skeniranje bar koda" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "Podaci bar koda" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "Korisnik koji je skenirao bar kod" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "Vremenski trag" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "Datum i vreme skeniranja bar koda" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "URL krajnja tačka kojaj je obradila bar kod" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "Kontekst" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "Kontekst podataka za skeniranje bar koda" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "Odgovor" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "Podaci odgovora za skeniranje bar koda" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Rezultat" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "Da li je skeniranje bar koda bilo uspešno?" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Ključ" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Pokrenuto je" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Čekaju se zadaci" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Planirani zadaci" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Propali zadaci" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "ID zadatka" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Jedinstveni ID zadatka" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Zaključaj" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Vreme zaključavanja" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Naziv zadatka" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funkcija" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Ime funkcije" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argumenti" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Argumenti zadatka" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Ključne reči argumenata" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Ključne reči argumenata zadatka" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Ime datoteke" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Tip modela" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Korisnik nema dozvolu da napravi ili izmeni priloge za ovaj model" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Lista odabira je zaključana" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Nema grupe" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "URL sajta je zaključan od strane konfiguracije" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Ponovno pokretanje potrebno" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Podešavanje je izmenjeno i zahteva ponovno pokretanje servera" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Migracije na čekanju" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Broj migracija baze podataka koje su na čekanju" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Ime instance servera" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Stringovni opis instance servera" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Ime instance korisnika" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Koristi ime instance u naslovnoj liniji" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Zabrani prikazivanje `O nama`" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Prikaži `O nama` samo superkorisnicima" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Ime kompanije" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "Interno ime kompanije" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "Osnovni URL" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "Osnovni URL za instancu servera" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Podrazumevana valuta" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "Izaberi osnovnu valutu za određivanje cena" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "Podržane valute" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "Lista kodova podržanih valuta" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "Interval ažuriranja valuta" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Koliko često ažurirati devizne kurseve (podesi na nulu za onemogućti)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "dani" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "Dodatak za ažuriranje valute" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "Dodatak za ažuriranje valute koji će se koristiti" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "Skini sa URL" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "Dozvoli skidanje sa udaljenih lokacija slika i datoteka" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "Ograničenje veličine skidanja" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "Maksimalna dozvoljena veličina slike koja se skida" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "Korisnik-agent koji se koristi za skidanje sa URL" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Dozvoli premošćavanje koji će se korisnik-agent koristiti za skidanje slika i datoteka sa spoljašnjeg URL (ostavi prazno da se podesi kao podrazumevano)" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "Stroga validacija URL" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "Traži specifikaciju za validaciju URL-ova" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "Ažuriraj interval provere" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "Koliko često da proveravam za nova ažuriranja? (podesi na nulu da bi isključio)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Automatsko pravljenje rezervne kopije" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "Omogući automatsko pravljenje rezervne kopije baze podataka i medijskih datoteka" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "Automatski interval pravljenja rezervnih kopija" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "Odredi broj dana između automatskih pravljenja rezervnih kopija" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "Interval brisanja zadataka" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "Rezultati pozadinskih zadataka biće izbrisani nakon određenog broja dana " -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "Interval brisanja evidencije grešaka" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "Evidencija grešaka biće izbrisana nakon određenog broja dana" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "Interval brisanja obaveštenja" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "Korisnička obaveštenja biće izbrisana nakon određenog broja dana" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Podrška za bar kod" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "Omogući podršku za bar kod skener preko interfejsa stranice" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "Uskladišti rezultate bar koda" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "Uskladišti rezultate bar koda u bazu podataka" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "Maksimalan broj skeniranja bar koda" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "Maksimalan broj rezultata skeniranja bar koda koji treba da se skladišti" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "Kašnjenje unosa bar koda" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "Vreme kašnjena obrađivanja ulaza bar koda" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "Podrška za bar kod veb kameru" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "Omogući skeniranje bar koda pomoću veb kamere u pretraživaču" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "Prikaži podatke bar koda" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "Prikaži podatke bar koda u pretraživaču kao tekst" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "Dodatak za generisanje bar koda" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "Dodatak koji će se koristiti kao interni generator podataka bar koda" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "Revizije dela" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "Omogući polje za reviziju dela" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "Jedino revizija sastavljanja " -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "Dozvoli jedino revizije za sastavne delove" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "Dozvoli brisanje iz sastavljanja" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "Dozvoli brisanje delova koji su korišćeni u sastavljanju" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "Interni broj dela regex" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "Regularni obrazac izraza za podudaranje IPN dela" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "Dozvoli duple IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "Dozvoli da više delova dele isti IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "Dozvoli izmenu IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "Dozvoli izmenu IPN vrednosti u toku izmene dela" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "Kopiraj BOM podatke dela" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "Podrazumevaj kopiranje BOM podataka prilikom pravljenja duplikata dela " -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "Kopiraj podatke parametara dela" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "Podrazumevaj kopiranje podataka parametara dela prilikom pravljenja duplikata dela" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "Kopiraj podatke testiranja dela" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "Podrazumevaj kopiranje podataka testiranja dela prilikom pravljenja duplikata dela" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "Kopiraj šablone parametara kategorije" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "Kopiraj šablone parametara kategorije prilikom pravljenja dela" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "Podrazumevano je da su delovi šabloni" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "Podrazumevano je da se delovi mogu sastavljati od drugih komponenti" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponenta" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "Podrazumevano je da se delovi mogu koristi kao pod-komponente" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Može da se kupi" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "Podrazumevano je da se delovi mogu kupiti" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Može da se proda" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "podrazumevano je da delovi mogu da se prodaju" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "Podrazumevano je da delovi mogu da se prate" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Virtuelni" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "Podrazumevano je da su delovi virtuelni" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "Prikaži povezane delove" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "Prikaži povezane delove za deo" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "Inicijalni podaci zaliha" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "Dozvoli kreiranje inicijalne alihe prilikom dodavanja novog dela" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "Podaci inicijalnog dobavljača" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Dozvoli kreiranje inicijalnog dobavljača prilikom dodavanja novog dela" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "Format prikazivanja imena dela" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "Format u kome će se prikazivati ime dela" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "Podrazumevana ikona za kategoriju dela" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "Podrazumevana ikona za kategoriju dela (prazno znači bez ikone)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "Minimalan broj decimalnih mesta za cene" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Minimalan broj decimalnih mesta prilikom generisanja cenovnih podataka" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "Maksimalan broj decimalnih mesta za cene" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maksimalan broj decimalnih mesta prilikom generisanja cenovnih podataka" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "Koristi cene dobavljača" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Uključi pauziranje cene dobavljača u sveukupnom računanju cene" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "Premosti istorijat kupovina" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Prethodne cene narudžbenice zamenjuje pauze cena dobavljača" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "Koristi cene stavki u zalihama" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Koristi cene koje su ručno unete u podatke zaliha" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "Godina cena stavki u zalihama" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Odstrani stavke zaliha iz kalkulacija cena, koje su starije od ovog broja dana" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "Koristi drugačije cene" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "Uključi drugačije cene u sveukupnim kalkulacijama cene" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "Samo aktivne varijante" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "Koristi samo aktivne varijante za određivanje varijante cene" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "Vremenski period za ponovno određivanje cena" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "Broj dana koji treba da prođe da bi se cene delova automatski ažurirale" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Interne cene" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "Omogući interne cene za delove" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "Premošćavanje internih cena" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "Ako su dostupne, interne cene premošćuju kalkulacije opsega cena" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "Omogući štampanje etiketa" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "Omogući štampanje etiketa preko web interfejsa" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "DPI slike etikete" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI rezolucija prilikom generisanja slikovne datoteke za dodatak koji štampa etikete" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Omogući izveštaje" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "Omogući generisanje izveštaja" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "Mod otklanjanja grešaka" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "Generiši izveštaje u modu za otklanjanje grešaka (izlaz je u HTML)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "Greške evidencije izveštaja" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "Greške evidentiranja koje se dese prilikom generisanja izveštaja" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Veličina stranice" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "Podrazumevana veličina strane za izveštaje u PDF formatu" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "Zahtevaj jedinice parametara" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "Ako su jedinice date, vrednosti parametara moraju odgovarati datim jedinicama" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "Globalno jedinstveni serijski brojevi" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "Serijski brojevi za stavke zaliha moraju da budu globalno jedinstveni" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "Obriši ispražnjene zalihe" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "Ovo određuje podrazumevano ponašanje kada je stavka zaliha istrošena" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "Šablon koda serije" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "Šablon za generisanje podrazumevanih kodova serije stavki u zalihama" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "Datum isteka zaliha" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "Omogući funkcionalnost isteka zaliha" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "Prodaja isteklih zaliha" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "Dozvoli prodaju isteklih zaliha" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "Vreme zastarevanja zaliha" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "Broj dana tokom kojih će se stavke zaliha smatrati zastarelim pre isteka" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "Izrada sa isteklim zalihama" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "Dozvoli izradu sa isteklim zalihama" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "Vlasnička kontrola zaliha" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "Omogući vlasničku kontrolu nad lokacijama zaliha i stavkama" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "Podrazumevana ikonica lokacije zaliha" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "Podrazumevana ikonica lokacije zaliha (prazno znači da nema ikonice)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "Prikaži instalirane stavke sa zaliha" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "Prikaži instalirane stavke sa zaliha u stok tabelama" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "Proveri spisak materijala pri instalaciji stavki" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Instalirane stavke sa zaliha moraju postojati u spisku materijala nadređenog dela" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "Dozvoli transfer van zaliha" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Dozvoli da stavke sa zaliha koje nisu na zalihama budu premeštane između lokacija zaliha" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "Referentni šablon naloga za izradu" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "Potreban šablon za generisanje referentnog polja naloga za izradu" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "Potreban odgovoran vlasnik" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "Odgovoran vlasnik mora biti dodeljen svakom nalogu" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "Potreban aktivan deo" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "Spreči kreiranje naloga za izradu za neaktivne delove" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "Potreban zaključan deo" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "Spreči kreiranje nalogaza izradu za otključane delove" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "Potreban validan spisak materijala" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "Spreči kreiranje naloga za izradu pre validacije spiska materijala" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "Potrebno završavanje podređenih naloga" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "Spreči završavanje naloga za izradu pre završavanja svih podređenih naloga" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Blokiraj dok ne prođe test" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Spreči završavanje naloga za izradu pre uspešnog završetka svih testova" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "Omogući naloge za vraćanje" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "Omogući funkcionalnost vraćana u korisničkom interfejsu" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "Referentni šablon naloga za vraćanje" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "Potreban šablon pri generisanju referentnog polja naloga za vraćanje" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "Izmeni završene naloge za vraćanje" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "Dozvoli izmenu naloga za vraćanje nakon što su završeni" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "Referentni šablon naloga za prodaju" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "Potreban šablon pri generisanju referentnog polja naloga za prodaju" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "Podrazumevana isporuka naloga za prodaju" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "Omogućava kreiranje podrazumevane isporuke sa nalozima za prodaju" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "Izmeni završene naloge za prodaju" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Dozvoli izmenu naloga za prodaju nakon što su isporučeni ili završeni" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "Označi isporučene naloge kao završene" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Nalozi za prodaju označeni kao isporučeni će automatski biti završeni, zaobilazeći status isporučen" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "Referentni šablon naloga za kupovinu" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "Potreban šablon pri generisanju referentnog polja naloga za kupovinu" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "Izmeni završene naloge za kupovinu" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Dozvoli izmenu naloga za kupovinu nakon što su isporučeni ili završeni" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "Automatski završi naloge za kupovinu" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Automatski označi naloge za kupovinu kao završene kada su primljene sve stavke porudžbine" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Omogući zaboravljenu lozinku" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "Omogući funkcionalnost zaboravljene lozinke na stranicama za prijavljivanje" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Omogući registraciju" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "Omogući registraciju korisnicima na stranicama za prijavljivanje" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "Omogući SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "Omogući SSO na stranicama za prijavljivanje" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "Omogući SSO registraciju" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Omogući registraciju preko SSO za korisnike na stranicaa za prijavljivanje" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "Omogući SSO sinhronizaciju grupa" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Omogući sinhronizaciju grupa aplikacije sa grupama IdP-a" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "SSO ključ grupe" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Nazivi grupa dobijaju atribute od IdP-a" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "Mapiranje SSO grupa" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Mapiranje SSO grupa u lokalne grupe aplikacije. Ukoliko lokalna grupa ne postoji, biće kreirana." -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "Ukloni grupe van SSO" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Da li će grupe dodeljene korisnicima biti uklonjene ukoliko nisu podržane IdP-om. Onemogućavanje ovoga može dovesti do problema." -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "Email neophodan" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "Zahtevaj od korisnika da dostavi mejl prilikom registracije" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "Automatski popuni SSO korisnike" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "Automatski popuni korisnikove podatke iz SSO naloga" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "Email dva puta" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "Pitaj korisnika dva puta za email prilikom registracije" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Lozinka dva puta" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "Pitaj korisnika dva puta za lozinku prilikom registracije" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "Dozvoljeni domeni" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Ograniči registraciju na određene domene (razdvojeni zapetom, počinju sa @)" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "Grupa pri registrovanju" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Grupa kojoj se novi korisnici dodeljuju pri registraciji. Ukoliko je SSO group sync omogućen, ova grupa će se dodavati ukoliko korisnik ne može da dobije grupu iz IdP-a." -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "Nametni MFA" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "Korisnici moraju koristiti multifaktorsku bezbednost" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "Proveri plugine pri pokretanju" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Proveri da li su svi pluginovi instalirani pri pokretanju - omogućeni u kontejnerskim okruženjima" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "Proveri ažuriranja pluginova" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "Omogući periodično proveranje pluginova" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "Omogući URL integraciju" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "Omogući da pluginovi dodaju URL rute" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "Omogući integraciju u navigaciju" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "Omogući integraciju pluginova u navigaciju" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "Omogući integraciju aplikacija" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "Omogući pluginovima da dodaju aplikacije" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "Omogući integraciju planiranja" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "Omogući da plugini izvršavaju planirane zadatke" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "Omogući integraciju događaja" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "Omogući da plugini odgovaraju na unutrašnje događaje" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "Omogući integraciju interfejsa" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "Omogući integraciju pluginova u korisnički interfejs" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "Ne uključuj eksterne lokacije" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "Period automatskog popisa" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "Prikaži puna imena korisnika" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "Prikaži puna imena korisnika umesto korisničkih imena" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "Omogući podatke test stanica" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "Omogući prikupljanje podataka sa test stanica radi rezultata testova" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "Deo je aktivan" msgid "Manufacturer is Active" msgstr "Proizvođač je aktivan" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Deo dobavljača je aktivan" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Interni deo je aktivan" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Dobavljač je aktivan" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Proizvođač" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Kompanija" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "Ima zalihe" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Adrese" @@ -4163,7 +4195,7 @@ msgstr "Beleške o isporuci za internu upotrebu" msgid "Link to address information (external)" msgstr "Link za adresne informacije (eksterni)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Deo proizvođača" @@ -4181,12 +4213,12 @@ msgstr "Izaberi deo" msgid "Select manufacturer" msgstr "Izaberi proizvođača" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "Broj dela proizvođača" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Broj dela proizvođača" @@ -4210,8 +4242,8 @@ msgstr "Jedinice pakovanja moraju biti veće od nule" msgid "Linked manufacturer part must reference the same base part" msgstr "Povezani delovi dobavljača moraju referencirati isti osnovni deo" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Dobavljač" msgid "Select supplier" msgstr "Izaberi dobavljača" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Jedinica za držanje dobavljačevih zaliha" @@ -4258,8 +4290,8 @@ msgstr "osnovni trošak" msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimalna naplata (npr. taksa za slaganje)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Pakovanje" @@ -4307,14 +4339,18 @@ msgstr "Podrazumevana valuta koja se koristi za ovog dobavljača" msgid "Company Name" msgstr "Naziv kompanije" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Na zalihama" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "Kolona je već mapirana u polje u bazi podataka" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Polje je već mapirano u kolonu sa podacima" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "Mapiranje kolona mora biti linkovano da bi se uvezla važeća sesija" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "Kolona ne postoji u fajlu sa podacima" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "Polje ne postoji u ciljnom modelu" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Izabrano polje je samo za čitanje" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Uvezi sesiju" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Polje" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Kolona" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Indeks vrsta" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Originalni podaci vrste" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Greške" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Važeće" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "Broj kopija za štampanje od svakog natpisa" msgid "Connected" msgstr "Konektovano" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Nepoznato" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "Referenca naloga" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Izvanredno" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "Ima cenu" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Završen pre" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Završen nakon" @@ -4779,17 +4815,17 @@ msgstr "Završen nakon" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "Nalog" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Nalog završen" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Interni deo" @@ -4797,27 +4833,27 @@ msgstr "Interni deo" msgid "Order Pending" msgstr "Nalog na čekanju" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Završeno" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Ima isporuku" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Nalog za kupovinu" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "Nalog za kupovinu" msgid "Sales Order" msgstr "Nalog za prodaju" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Opis naloga (opciono)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "Izaberi šifru projekta za ovaj nalog" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "Link ka eksternoj stranici" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Ciljani datum" @@ -4919,413 +4955,421 @@ msgstr "Lice za kontakt za ovaj nalog" msgid "Company address for this order" msgstr "Adresa kompanije za ovaj nalog" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "Referenca naloga" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "Status naloga za kupovinu" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "Kompanija od koje su stavke naručene" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "Referenca dobavljača" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "Referentni kod dobavljača naloga" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "primljeno od strane" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "Datum kada je nalog završen" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "Odredište" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "Odredište za primljene stavke" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "Dobavljač dela se mora poklapati sa dobavljačem naloga za kupovinu" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "Stavka porudžbine se ne poklapa sa nalogom za kupovinu" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "Količina mora biti pozitivan broj" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Mušterija" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "Kompanija kojoj se prodaju stavke" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "Status naloga za prodaju" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "Referenca mušterije" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "Referentni kod mušterijinog naloga" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "Datum isporuke" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "isporučeno od strane" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "Nalog je već završen" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "Nalog je već otkazan" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "Samo otvoren nalog može biti označen kao završen" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Nalog ne može biti završen jer ima nepotpunih isporuka" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Nalog ne može biti završen jer ima nepotpunih alokacija" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "Nalog ne može biti završen jer ima nezavršenih stavki porudbžine" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "Količina stavki" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1822 msgid "Line item reference" msgstr "Referenca stavke porudbžine" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "Beleške stavke porudbžine" -#: order/models.py:1822 +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Krajnji datum za ovu stavku porudbćine (ostaviti prazno za krajnji datum sa naloga)" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "Opis stavke porudžbine (opciono)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "Dodatni kontekst za ovu porudžbinu" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "Cena jedinice" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "Stavka porudžbine naloga za kupovinu" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "Deo dobavljača se mora poklapati sa dobavljačem" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "Deo dobavljača" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "Primljeno" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "Broj primljenih stavki" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Kupovna cena" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "Kupovna cena jedinice" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "Dodatna porudbžina naloga za kupovinu" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "Stavka porudžbine naloga za prodaju" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "Samo delovi koji se mogu prodati mogu biti dodeljeni nalogu za prodaju" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Prodajna cena" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "Prodajna cena jedinice" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Poslato" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "Isporučena količina" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "Isporuka naloga za prodaju" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "Datum isporuke" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "Datum dostavljanja" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "Datum dostavljanja isporuke" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "Provereno od strane" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "Korisnik koji je proverio ovu isporuku" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Isporuka" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "Broj isporuke" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "Broj praćenja" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "Informacije o praćenju isporuke" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "Broj računa" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "Referentni broj za dodeljeni račun" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "Isporuka je već poslata" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "Isporuka nema alocirane stavke sa zaliha" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "Dodatne porudbžine naloga za prodaju" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "Alokacije naloga za prodaju" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "Stavka sa zaliha nije dodeljena" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "Ne mogu se alocirati stavke sa zaliha porudbžini sa drugačijim delom" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "Ne mogu se alocirati zalihe porudbžini bez dela" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Alocirana količina ne sme da pređe količinu zaliha" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "Količina alokacije mora da bude veća od nule" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Količina mora biti 1 za serijalizovane stavke sa zaliha" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "Nalog za prodaju se ne poklapa sa isporukom" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Isporuka se ne poklapa sa nalogom za prodaju" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Porudbžina" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "Referenca isporuke naloga za prodaju" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "Stavka" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "Izaberi stavku sa zaliha za alokaciju" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "Unesi količinu za alokaciju zaliha" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "Referenca naloga za vraćanje" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "Kompanija čije stavke su vraćene" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "Status naloga za vraćanje" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "Vrati stavku porudbžine" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "Stavka sa zaliha mora biti određena" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "Količina vraćanja je premašila količinu zaliha" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "Količina vraćanja mora biti veća od nule" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "Nevažeća količina za serijalizovane stavke sa zaliha" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "Izaberi stavku za vraćanje od mušterije" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "Primljeno datuma" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "Ishod" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "Ishod za ovu stavku porudžbine" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "Trošak asociran sa popravkom ili vraćanjem ove stavke porudžbine" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "Doda" @@ -5353,7 +5397,7 @@ msgstr "Kopiraj dodatne porudžbine" msgid "Copy extra line items from the original order" msgstr "Kopiraj dodatne stavke porudžbine sa originalnog naloga" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Kopiraj parametre" @@ -5372,216 +5416,216 @@ msgstr "Stavke porudbžine" msgid "Completed Lines" msgstr "Završene porudbžine" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Dupliraj nalog" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Odredi opcije za dupliranje ovog naloga" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "Nevažeći ID naloga" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Naziv dobavljača" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Nalog ne može biti otkazan" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Dozvoli da nalog bude zatvoren sa nepotpunim porudžbinama" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Nalog ima nepotpune stavke porudžbine" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Nalog nije otvoren" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Automatske cene" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Automatski izračunaj kupovnu cenu na osnovu podataka o delovima dobavljača" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Valuta kupovne cene" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Spoj stavke" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Spoj stavke sa istim delom, odredištem i ciljanim datumom u jednu stavku porudžbine" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Jedinica za praćenje zaliha" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Interni broj dela" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Interni naziv dela" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Deo dobavljača mora biti određen" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Nalog za kupovinu mora biti određen" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Dobavljač mora da se poklapa sa nalogom za kupovinu" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Nalog za kupovinu mora da se poklapa sa dobavljačem" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Stavka porudbžine" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Izaberi odredišnu lokaciju za primljene stavke" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Unesi šifru ture za nadolazeće stavke sa zaliha" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Datum isteka" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Unesi serijske brojeve za nadolazeće stavke sa zaliha" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Promeni informacije o pakovanju za nadolazeće stavke sa zaliha" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Dodatne beleške za nadolazeće stavke sa zaliha" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Bar kod" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Skeniran bar kod" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Bar kod je već u upotrebi" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Stavke porudžbine moraju biti dostavljene" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Odredišna lokacija mora biti određena" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Pružene vrednosti bar kodova moraju biti jedinstvene" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Isporuke" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Završene isporuke" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Valuta prodajne cene" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Alocirane stavke" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Nisu dostavljeni detalji isporuke" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Stavka porudžbine nije asocirana sa ovim nalogom" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Količina mora biti pozitivna" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Unesi serijske brojeve za alokaciju" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Isporuka je već isporučena" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Isporuka nije povezana sa ovim nalogom" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Nema pronađenih poklapanja za sledeće serijske brojeve" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Sledeći serijski brojevi su nedostupni" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Stavka porudžbine naloga za vraćanje" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Stavka porudžbine se ne poklapa sa nalogom za vraćanje" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Stavka porudžbine je već primljena" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Stavke se mogu primiti samo na osnovu naloga koji su u toku" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Količina za vraćanje" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Valuta cene porudžbine" @@ -5797,7 +5841,7 @@ msgstr "Podrazumevane ključne reči za delove ove kategorije" msgid "Icon" msgstr "Ikonica" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikonica (opciono)" @@ -5818,7 +5862,7 @@ msgstr "Podrazumevana vrednost" msgid "Default Parameter Value" msgstr "Podrazumevana vrednost parametra" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Delovi" @@ -5933,7 +5977,7 @@ msgstr "Ključne reči dela da bi se poboljšala vidljivost u rezultatima pretra msgid "Part category" msgstr "Kategorija dela" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Interni broj dela" @@ -5942,7 +5986,7 @@ msgstr "Interni broj dela" msgid "Part revision or version number" msgstr "Revizija dela ili broj verzije" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Revizija" @@ -5966,7 +6010,7 @@ msgstr "Podrazumevani istek" msgid "Expiry time (in days) for stock items of this part" msgstr "Vreme isteka (u danima) za stavke sa zaliha ovog dela" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimalne zalihe" @@ -6447,355 +6491,355 @@ msgstr "Relacija između delova ne može biti kreirana između jednog istog dela msgid "Duplicate relationship already exists" msgstr "Identična veza već postoji" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Nadređena kategorija" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Nadređena kategorija dela" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Podkategorije" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Rezultati" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Broj rezultata napravljenih na osnovu ovog šablona" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Valuta kupovine za ovu stavku sa zaliha" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Originalni deo" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Izaberi originalni deo za duplikaciju" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Kopiraj sliku" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Kopiraj sliku sa originalnog dela" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Kopiraj spisak materijala" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Kopiraj spisak materijala sa originalnog dela" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Kopiraj parametarske podatke sa originalnog dela" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Kopiraj beleške" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Kopiraj beleške sa originalnog dela" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Inicijalna količina zaliha" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Odredi inicijalnu količinu zaliha za ovaj deo. Ukoliko je količina nula, neće biti dodate zalihe." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Inicijalna lokacija zaliha" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Odredi inicijalnu lokaciju zaliha za ovaj deo" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Izaberi dobavljača (ostavi prazno za preskakanje)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Izaberi proizvođača (ostavi prazno za preskakanje)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Broj dela proizvođača" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "Izabrana kompanija nije validan dobavljač" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "Izabrana kompanija nije validan proizvođač" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Deo proizvođača koji se poklapa sa ovim brojem dela proizvođača već postoji" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Deo dobavljača koji se opklapa sa ovim brojem dela dobavljača već postoji" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Naziv kategorije" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Izrađivanje" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Stavke sa zaliha" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Revizije" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Ukupne zalihe" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Nealocirane zalihe" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Varijante zaliha" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Dupliraj deo" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Kopiraj inicijalne podatke od drugog dela" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Početne zalihe" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Kreiraj deo sa početnom količinom zaliha" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Informacije o dobavljaču" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Dodaj inicijalne informacije o dobavljaču za ovaj deo" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Kopiraj parametre kategorije" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Kopiraj parametarske šablone sa izabrane kategorije dela" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Postojeća slika" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Ime fajla postojeće slike dela" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Fajl sa slikom ne postoji" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Validiraj ceo spisak materijala" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Može se izgraditi" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Minimalna cena" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Izmeni izračunatu vrednost za minimalnu cenu" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Minimalna valuta cene" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Maksimalna cena" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Izmeni izračunatu vrednost maksimalne cene" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Maksimalna valuta cene" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Ažuriraj" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Ažuriraj cene za ovaj deo" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Nija moguća konverzija iz dostavljen valute u {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Minimalna cena ne sme biti veća od maksimalne cene" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Maksimalna cena ne sme biti manja od minimalne cene" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Izaberi nadređeni sklop" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Izaberi komponentu dela" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "Izaberi deo sa kog će se kopirati spisak materijala" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Ukloni postojeće podatke" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Ukloni postojeće stavke sa spiska materijala pre kopiranja" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Uključi nasleđeno" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Uključi stavke sa spiska materijala koje su nasleđene od šablonskih delova" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Preskoči nevažeće vrste" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Omogući ovu opciju za preskakanje nevažećih vrsta" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Kopiraj zamenske delove" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopiraj zamenske delove prilikom duplikacije stavki sa spiska materijala" @@ -7516,7 +7560,7 @@ msgstr "Border" msgid "Print a border around each label" msgstr "Štampa border oko svakog natpisa" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "Lendskejp" @@ -7596,64 +7640,77 @@ msgstr "Pruža podršku za skeniranje TME bar kodova" msgid "The Supplier which acts as 'TME'" msgstr "Dobavljač koji se ponaša kao 'TME'" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Samo osoblje može da administrira pluginove" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "Instalacija plugina je onemogućena" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Plugin instaliran uspešno" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Instaliran plugin na {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "Plugin nije pronađen u registru" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "Plugin nije paket plugin" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Ime paketa plugina nije pronađeno" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Samo osoblje može da administrira pluginove" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "Deinstaliranje plugina je onemogućeno" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "Plugin ne može biti deinstaliran jer je trenutno aktivan" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "Plugin nije instaliran" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Instalacija plugina nije pronađena" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Plugin uspešno deinstaliran" @@ -7900,55 +7957,55 @@ msgstr "Instalacija nije potvrđena" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Potpuno ponovno učitavanje" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Izvrši potpuno ponovno učitavanje registra pluginova" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Nasilno ponovo učitaj" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Nasilno ponovo učitaj registar pluginova, iako je već učitan" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Skupi plugine" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Skupi plugine i dodaj ih u registar" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Aktiviraj plugin" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Aktiviraj ovaj plugin" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Obriši konfiguraciju" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Obriši konfiguraciju plugina iz baze podataka" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "Stavke" @@ -7964,7 +8021,7 @@ msgstr "Plugin ne podržava štampanje natpisa" msgid "Invalid label dimensions" msgstr "Nevažeće dimenzije natpisa" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "Nema važećih stavki dostavljenih šablonu" @@ -7988,152 +8045,156 @@ msgstr "Letter" msgid "Template file with this name already exists" msgstr "Šablonski fajl sa ovim imenom već postoji" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "Ime šablona" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "Opis šablona" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "Broj revizija (auto-inkrement)" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "Priloži kao model uz štampanje" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "Sačuvaj izveštaj kao prilog uz uvezanu instancu modela prilikom štampanja" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "Šablon imena fajlova" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "Šablon za generisanje imena fajlova" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "Šablon je omogućen" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "Tip ciljanog modela za šablon" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Filteri" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "Filteri upita nad šablonima (lista razdvojena zarezom ključ=vrednost parova)" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "Šablonski fajl" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "Veličina strane za PDF izveštaje" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "Renderuj izveštaj u landscape orijentaciji" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Širina (u milimetrima)" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "Širina natpisa, u milimetrima" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Visina (u milimetrima)" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "Visina natpisa, u milimetrima" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "Isečak" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "Izveštaj isečka fajla" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "Opis isečka fajla" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "Sredstvo" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "Izveštaj fajla sredstva" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "Opis fajla sredstva" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "Izaberi šablon izveštaja" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "Spisak primarnih ključeva stavke koje će biti uključene u ovaj izveštaj" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "Izaberi šablon natpisa" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "Plugin za štampanje" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "Izaberi plugin za korišćenje prilikom štampanja natpisa" @@ -8231,7 +8292,7 @@ msgstr "Izveštaj sa testa za stavku sa zaliha" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Instalirane stavke" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "part_image tag zahteva instancu dela" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "company_image tag zahteva instancu kompanije" @@ -8304,7 +8365,7 @@ msgstr "Filtriraj po nadređenim lokacijama" msgid "Include sub-locations in filtered results" msgstr "Uključi podlokacije u filtriranim rezultatima" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Nadređena lokacija" @@ -8388,7 +8449,7 @@ msgstr "Datum isteka pre" msgid "Expiry date after" msgstr "Datum isteka nakon" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Zastarelo" @@ -8522,7 +8583,7 @@ msgstr "Deo mora biti određen" msgid "Stock items cannot be located into structural stock locations!" msgstr "Stavka sa zaliha ne može biti locirana u strukturnim lokacijama zaliha!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Stavka sa zaliha ne može biti kreirana za virtuelne delove" @@ -8567,7 +8628,7 @@ msgstr "Izaberi odgovarajući deo dobavljača za ovu stavku sa zaliha" msgid "Where is this stock item located?" msgstr "Gde je locirana ova stavka sa zaliha?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Pakovanje u kom je ova stavka sa zaliha" @@ -8583,7 +8644,7 @@ msgstr "Da li je ova stavka instalirana u drugu stavku?" msgid "Serial number for this item" msgstr "Serijski broj za ovu stavku" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Šifra ture za ovu stavku sa zaliha" @@ -8696,7 +8757,7 @@ msgstr "Stavka sa zaliha je trenutno u produkciji" msgid "Serialized stock cannot be merged" msgstr "Serijalizovane zalihe se ne mogu spojiti" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Dupliraj stavke sa zaliha" @@ -8820,7 +8881,7 @@ msgstr "Izaberi deo za koji će se generisati serijski broj" msgid "Quantity of serial numbers to generate" msgstr "Količina serijskih brojeva koji će se generisati" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "Test šablon za ovaj rezultat" @@ -8844,222 +8905,222 @@ msgstr "Nadređena stavka" msgid "Parent stock item" msgstr "Nadređena stavka sa zaliha" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Koristi pakovanja prilikom dodavanja: količina je definisana brojem pakovanja" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Unesi serijske brojeve za nove stavke" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Dobavljački broj dela" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Isteklo" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Podređene stavke" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "Stavke za praćenje" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "Nabavna cena ove stavke, po jedinici ili pakovanju" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "Unesi broj stavka sa zaliha za serijalizaciju" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Količina ne sme da pređe dostupnu količinu zaliha ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Odredišna lokacija zaliha" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Serijski brojevi ne mogu biti dodeljeni ovom delu" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Serijski broj već postoji" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Izaberi stavku za instaliranje" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Količina za instaliranje" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Izaberi količinu stavki za instaliranje" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Dodaj beleške transakcija (opciono)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "Količina za instaliranje mora biti najmanje 1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Stavka je nedostupna" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Izabrani deo nije na spisku materijala" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "Količina za instaliranje ne sme preći dostupnu količinu" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Odredišna lokacija za deinstalirane stavke" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Izaberi deo u koji će se konvertovati stavka" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "Izabrani deo nije validna opcija za konverziju" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Ne može se konvertovati stavka sa dodeljenim delom dobavljača" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Statusni kod stavke sa zaliha" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Izaberi stavke kojoj će se promeniti status" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Nije izabrana stavka" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Podlokacije" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Lokacija nadređenih zaliha" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Deo mora biti za prodaju" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Stavka je alocirana nalogu za prodaju" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Stavka je alocirana nalogu za izradu" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Mušterija kojoj će se dodeliti stavke sa zaliha" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "Izabrana kompanija nije mušterija" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Beleške dodeljivanja zaliha" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Lista stavki mora biti dostavljena" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Beleške spajanja zaliha" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Dozvoli neslagajuće dobavljače" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Dozvoli spajanje stavki sa različitim delovima dobavljača" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Dozvoli neslagajući status" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Dozvoli spajanje stavki sa različitim statusnim kodovima" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "Bar dve stavke moraju biti dostavljene" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Nema promena" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Vrednost primarnog ključa stavke" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "Stavka nije na zalihama" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Beleške transakcija zaliha" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "Nalozi za prodaju" msgid "Return Orders" msgstr "Nalozi za vraćanje" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Korisničko ime" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Ime" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Ime korisnika" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Prezime" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Prezime korisnika" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Adresa E-pošte korisnika" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Osoblje" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Da li ovaj korisnik ima dozvole koje ima osoblje?" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Super korisnik" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Da li je ovaj korisnik Super korisnik?" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Da li je nalog ovog korisnika aktivan?" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Vaš nalog je kreiran" -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Molimo vas koristite opciju resetovanja lozinke da biste se prijavili" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Dobrodošli u InvenTree" diff --git a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po index 596780acc1..990f0e731f 100644 --- a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -49,7 +49,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Användaren har inte behörighet att se denna modell" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Kunde inte konvertera {original} till {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Ogiltigt antal angivet" @@ -104,13 +104,13 @@ msgstr "Ange datum" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Anteckningar" @@ -123,75 +123,91 @@ msgstr "Värdet '{name}' visas inte i mönsterformat" msgid "Provided value does not match required pattern: " msgstr "Det angivna värdet matchar inte det obligatoriska mönstret: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Tom serienummersträng" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Serienummret finns redan" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Ogiltig grupp: {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Gruppintervall {group} överstiger tillåtet antal ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Inga serienummer hittades" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Ta bort HTML-taggar från detta värde" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Anslutningsfel" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Servern svarade med ogiltig statuskod" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Undantag inträffade" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Servern svarade med ogiltigt innehållslängdsvärde" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Bilden är för stor" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Nedladdning av bilder överskred maximal storlek" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Fjärrservern returnerade tomt svar" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Angiven URL är inte en giltig bildfil" @@ -199,7 +215,7 @@ msgstr "Angiven URL är inte en giltig bildfil" msgid "Log in to the app" msgstr "Logga in på appen" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-postadress" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Ogiltigt val" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Namn" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Beskrivning" msgid "Description (optional)" msgstr "Beskrivning (valfritt)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Sökväg" @@ -320,51 +336,51 @@ msgstr "Ett fel har loggats av servern." msgid "Image" msgstr "Bild" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Måste vara ett giltigt nummer" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Välj valuta från tillgängliga alternativ" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Ogiltigt värde" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Fjärransluten bild" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL för fjärrbildsfil" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Nedladdning av bilder från fjärr-URL är inte aktiverad" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "Kinesiska (Förenklad)" msgid "Chinese (Traditional)" msgstr "Kinesiska (Traditionell)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "Ogiltig fysisk enhet" msgid "Not a valid currency code" msgstr "Inte en giltig valutakod" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Orderstatus" @@ -545,21 +561,21 @@ msgstr "Orderstatus" msgid "Parent Build" msgstr "Föregående tillverkning" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Inkludera varianter" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "Inkludera varianter" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "Inkludera varianter" msgid "Part" msgstr "Del" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -653,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Tillverkningen måste avbrytas innan den kan tas bort" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Valfri" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -671,32 +687,32 @@ msgstr "" msgid "Tracked" msgstr "Spårad" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Testbar" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Allokerad" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Konsumerad" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Tillgänglig" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -704,26 +720,26 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Byggorder" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Plats" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "Tillverknings order referens" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Försäljningsorderreferens" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Källa Plats" @@ -845,16 +861,16 @@ msgstr "Tillverknings status" msgid "Build status code" msgstr "Tillverkning statuskod" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Batchkod" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Batch-kod för denna byggutdata" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Skapad" @@ -875,7 +891,7 @@ msgstr "Datum för slutförande" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Måldatum för färdigställande. Tillverkningen kommer att förfallas efter detta datum." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Slutförandedatum" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Projektkod" @@ -948,7 +964,7 @@ msgstr "Tillverknings order {build} har slutförts" msgid "A build order has been completed" msgstr "En tillverknings order har slutförts" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -964,23 +980,23 @@ msgstr "Byggutgång är redan slutförd" msgid "Build output does not match Build Order" msgstr "Byggutgång matchar inte bygg order" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1001,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "Bygg objekt" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Bygg objekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "Antal måste vara 1 för serialiserat lager" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Tilldelad kvantitet ({q}) får inte överstiga tillgängligt lagersaldo ({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "Lagerposten är överallokerad" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Artikel i lager" @@ -1083,378 +1099,378 @@ msgstr "Destination lagervara" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Delnamn" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Bygg utdata" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Byggutdata matchar inte överordnad version" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Ange serienummer för att tillverkade produkter" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "En lista över tillverkade produkter måste anges" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Lagerplats för skrotade produkter" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Ignorera alla lagerallokeringar för skrotade produkter" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Plats för färdiga produkter" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Slutför utfall om lager inte har tilldelats fullt ut" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Ta bort ofullständiga produkter" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Ta bort eventuella produkter som inte har slutförts" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Acceptera ofullständig" -#: build/serializers.py:793 +#: build/serializers.py:800 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:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Tillverknings ordern är ofullständig" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Spårbar" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Ärvd" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Tillåt varianter" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "Avbruten" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "Är länk" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "Är fil" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1534,11 +1550,11 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Uppdaterad" @@ -1600,7 +1616,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Användare" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Pris" @@ -1633,10 +1649,10 @@ msgstr "" msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiv" @@ -1660,11 +1676,11 @@ msgstr "Hemlig" msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "Meddelande-ID" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "" @@ -1714,7 +1730,7 @@ msgstr "Titel" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "" msgid "Summary" msgstr "Sammanfattning" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Läs" @@ -1797,7 +1813,7 @@ msgstr "Saknad fil" msgid "Missing external link" msgstr "Extern länk saknas" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "Modelltyp" @@ -1833,7 +1849,7 @@ msgstr "Filstorlek" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1861,7 +1877,7 @@ msgstr "Logisk nyckel" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Värde" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Etikett" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Skapad" @@ -1998,334 +2014,334 @@ msgstr "Senast uppdaterad" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "Parametermall" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "Kryssruta" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "Val" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Aktiverad" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Mall" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Data" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "Streckkodsdata" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "Tidsstämpel" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "Sammanhang" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "Svar" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Resultat" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "Ett fel inträffade" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "E-postmeddelande" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "Bekräftad" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "Inget svar" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "Tråd-ID" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "Tråd" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "E-posttrådar" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Nyckel" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Väntande uppgifter" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Schemalagda uppgifter" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Misslyckade uppgifter" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Uppgifts-ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Lås" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Uppgiftsnamn" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Funktion" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Funktionsnamn" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argument" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Filnamn" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Modelltyp" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Ingen grupp" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Omstart krävs" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Serverinstans (Namn)" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Företagsnamn" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "Internt företagsnamn" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "Bas-URL" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "Bas-URL för serverinstans" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Standardvaluta" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "dagar" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "Ladda ner från URL" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "Tillåt nedladdning av bilder och filer från extern URL" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Stöd för streckkoder" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Virtuell" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "Delar är virtuella som standard" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "Visa relaterade delar" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "Visa relaterade delar för en del" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "Visningsformat för delnamn" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "Formatera för att visa artikelnamnet" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Interna priser" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "Aktivera etikettutskrift" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "Aktivera etikettutskrift från webbgränssnittet" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "Etikettbild DPI" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Aktivera rapporter" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "Aktivera generering av rapporter" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "Debugläge" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Sidstorlek" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "Standard sidstorlek för PDF-rapporter" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Förhindra produktion från att slutföras tills alla nödvändiga tester är klara" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Aktivera registrering" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "Aktivera SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "Tillåtna domäner" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Tillverkare" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Företag" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Adress" @@ -4163,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4181,12 +4213,12 @@ msgstr "Välj del" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "MPN" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4210,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Leverantör" msgid "Select supplier" msgstr "Välj leverantör" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4258,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4307,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "Företagsnamn" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "I lager" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Fält" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Kolumn" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Radindex" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Fel" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Giltig" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "" msgid "Connected" msgstr "Ansluten" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Okänd" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Intern del" @@ -4797,27 +4833,27 @@ msgstr "Intern del" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Slutförd" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "" msgid "Sales Order" msgstr "Försäljningsorder" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "" @@ -4886,7 +4922,7 @@ msgstr "Startdatum" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Måldatum" @@ -4919,413 +4955,421 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "Mål" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Kund" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "" -#: order/models.py:1800 -msgid "Line item reference" +#: order/models.py:1814 +msgid "Line Number" msgstr "" -#: order/models.py:1807 -msgid "Line item notes" +#: order/models.py:1815 +msgid "Line number for this item (optional)" msgstr "" #: order/models.py:1822 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1829 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Skickad" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "Leveransdatum" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "Kontrollerad av" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "Fakturanummer" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "Allokeringsmängden måste vara större än noll" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Rad" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Kopiera parametrar" @@ -5372,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Leverantörsnamn" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Streckkod" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5797,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "Ikon" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikon (valfritt)" @@ -5818,7 +5862,7 @@ msgstr "Standardvärde" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Artiklar" @@ -5933,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "Delkategori" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" @@ -5942,7 +5986,7 @@ msgstr "IPN" msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Revision" @@ -5966,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Underkategorier" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Resultat" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Originaldel" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Kopiera bild" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "Kopiera test" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Kategorinamn" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Revisioner" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Uppdatera" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Hoppa över ogiltiga rader" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "Mallnamn" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Filter" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "Mallfil" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Bredd [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Höjd [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8583,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8696,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Ingen förändring" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Användarnamn" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Förnamn" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Förnamn på användaren" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Efternamn" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Efternamn på användaren" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Avsändarens E-postadress" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Personal" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Har den här användaren behörighet för personal" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superanvändare" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Är den här användaren en superanvändare" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Är detta användarkonto aktivt" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "Lösenord" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Ditt konto har skapats." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Använd funktionen för lösenordsåterställning för att logga in" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Välkommen till InvenTree" diff --git a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po index 1523c35c78..9ac51a853f 100644 --- a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Thai\n" "Language: th_TH\n" @@ -49,7 +49,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "ปริมาณสินค้าไม่ถูกต้อง" @@ -104,13 +104,13 @@ msgstr "ป้อนวันที่" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "หมายเหตุ" @@ -123,75 +123,91 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "หมายเลขซีเรียลซ้ำกัน" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "ไม่พบหมายเลขซีเรียล" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "การเชื่อมต่อขัดข้อง" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "ไฟล์รูปภาพมีขนาดใหญ่เกินไป" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "" @@ -199,7 +215,7 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "อีเมล" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "ชื่อ" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "คำอธิบาย" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "" @@ -320,51 +336,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "ต้องเป็นตัวเลข" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "สกุลเงิน" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "" @@ -545,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -653,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -671,32 +687,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -704,26 +720,26 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "สถานที่" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -845,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -875,7 +891,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" @@ -948,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -964,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "จำนวนต้องมีค่ามากกว่า 0" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1001,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1083,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "ยกเลิกแล้ว" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1534,11 +1550,11 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "" @@ -1600,7 +1616,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "ผู้ใช้งาน" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "" @@ -1633,10 +1649,10 @@ msgstr "" msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1660,11 +1676,11 @@ msgstr "" msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "" @@ -1714,7 +1730,7 @@ msgstr "" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "" msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "" @@ -1797,7 +1813,7 @@ msgstr "ไม่พบไฟล์" msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "" @@ -1998,334 +2014,334 @@ msgstr "" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "ชื่อไฟล์" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "" @@ -4163,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" @@ -4181,12 +4213,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4210,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4258,8 +4290,8 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4307,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4797,27 +4833,27 @@ msgstr "" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "สำเร็จแล้ว" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4919,413 +4955,421 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "สถานะ" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "" -#: order/models.py:1800 -msgid "Line item reference" +#: order/models.py:1814 +msgid "Line Number" msgstr "" -#: order/models.py:1807 -msgid "Line item notes" +#: order/models.py:1815 +msgid "Line number for this item (optional)" msgstr "" #: order/models.py:1822 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1829 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "จัดส่งแล้ว" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5372,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5797,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5818,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "ชิ้นส่วน" @@ -5933,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "" @@ -5966,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8583,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8696,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:240 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "ยินดีต้อนรับเข้าสู่ Inventree" diff --git a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po index 658e4f2068..847c9bc4b1 100644 --- a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -49,7 +49,7 @@ msgstr "Değer verilmemiş" msgid "This field must be unique." msgstr "Bu alan eşsiz olmalı." -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "Kullanıcının bu modeli görüntüleme izni yok" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "{original} birimi {unit} birimine dönüştürülemedi" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Geçersiz veri sağlandı" @@ -104,13 +104,13 @@ msgstr "Tarih giriniz" msgid "Invalid decimal value" msgstr "Geçersiz ondalık değer" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Notlar" @@ -123,75 +123,91 @@ msgstr "'{name}' değeri desen formatında yer almıyor" msgid "Provided value does not match required pattern: " msgstr "Sağlanan değer gerekli kalıpla eşleşmiyor: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Geçersiz grup: {grup}" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Boş seri numarası dizesi" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Yinelenen seri" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Geçersiz grup: {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Grup aralığı {group}, izin verilen miktarı aşmaktadır ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Seri numarası bulunamadı" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Benzersiz seri numaralarının sayısı ({n}) miktarla eşleşmeli ({q})" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Bu değerden HTML etiketlerini kaldır" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "Veriler yasaklanmış işaretleme içeriği içeriyor" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Bağlantı hatası" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Sunucu geçersiz durum kodu ile cevap verdi" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "İstisna oluştu" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Sunucu geçersiz Content-Length değeriyle yanıt verdi" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Görsel boyutu çok büyük" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Görsel indirme maksimum boyutu aştı" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Uzak sunucu boş cevap döndü" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Sağlanan URL geçerli bir görsel dosyası değil" @@ -199,7 +215,7 @@ msgstr "Sağlanan URL geçerli bir görsel dosyası değil" msgid "Log in to the app" msgstr "Uygulamaya giriş yapın" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "E-posta" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Geçersiz seçim" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Adı" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Açıklama" msgid "Description (optional)" msgstr "Açıklama (isteğe bağlı)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Yol" @@ -320,51 +336,51 @@ msgstr "Bir hafta sunucu tarafından kayıt edildi." msgid "Image" msgstr "Görsel" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Geçerli bir numara olmalı" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Para birimi" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Mevcut seçeneklerden para birimini seçin" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "Bu alan boş olamaz." -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Geçersiz değer" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Uzak Görsel" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "Uzak görselin dosya URL'si" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Uzak URL'den görsel indirme etkin değil" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "Uzak URL'den görsel indirilemedi" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "Geçersiz içerik türü biçimi" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "İçerik türü bulunamadı" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "İçerik türü gerekli mixin sınıfı ile eşleşmemektedir" @@ -520,11 +536,11 @@ msgstr "Çince (Basitleştirilmiş)" msgid "Chinese (Traditional)" msgstr "Çince (Geleneksel)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "Güncelleme mevcut" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "InvenTree için güncelleme mevcut" @@ -536,7 +552,7 @@ msgstr "Geçersiz fiziksel birim" msgid "Not a valid currency code" msgstr "Geçerli bir para birimi kodu değil" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Sipariş Durumu" @@ -545,21 +561,21 @@ msgstr "Sipariş Durumu" msgid "Parent Build" msgstr "Üst Yapım İşi" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Varyantları Dahil Et" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "Varyantları Dahil Et" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "Varyantları Dahil Et" msgid "Part" msgstr "Parça" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -653,16 +669,16 @@ msgstr "Ağacı Hariç Tut" msgid "Build must be cancelled before it can be deleted" msgstr "Üretim silinemeden önce iptal edilmelidir" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Sarf Malzemesi" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "İsteğe Bağlı" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Montaj" @@ -671,32 +687,32 @@ msgstr "Montaj" msgid "Tracked" msgstr "İzlenen" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Test Edilebilir" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Sipariş Açık" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Tahsis Edildi" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Tüketildi" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Mevcut" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Siparişte" @@ -704,26 +720,26 @@ msgstr "Siparişte" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Üretim Emri" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Konum" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "Çıktı" @@ -767,8 +783,8 @@ msgstr "Hedef tarih başlangıç tarihinden sonra olmalıdır" msgid "Build Order Reference" msgstr "Üretim Emri Referansı" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Satış Emri Referansı" msgid "Sales Order to which this build is allocated" msgstr "Bu üretimin tahsis edildiği satış siparişi" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Kaynak Konum" @@ -845,16 +861,16 @@ msgstr "Üretim Durumu" msgid "Build status code" msgstr "Üretim durum kodu" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Sıra numarası" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Bu üretim çıktısının parti kodu" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Oluşturulma tarihi" @@ -875,7 +891,7 @@ msgstr "Hedef tamamlama tarihi" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Üretimin tamamlanması için hedef tarih. Bu tarihten sonra üretim gecikmiş olacak." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Tamamlama tarihi" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Bu üretim emrinin önceliği" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Proje Kodu" @@ -948,7 +964,7 @@ msgstr "{build} üretim emri tamamlandı" msgid "A build order has been completed" msgstr "Bir üretim emri tamamlandı" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "İzlenebilir parçalar için seri numaraları sağlanmalıdır" @@ -964,23 +980,23 @@ msgstr "Üretim çıktısı zaten tamamlanmış" msgid "Build output does not match Build Order" msgstr "Üretim çıktısı, üretim emri ile eşleşmiyor" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Miktar sıfırdan büyük olmalıdır" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Miktar çıktı miktarından büyük olamaz" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "Üretim çıktısı tüm gerekli testleri geçmedi" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "{serial} üretim çıktısı gerekli testleri geçmedi" @@ -1001,10 +1017,10 @@ msgstr "Üretim Emri Satırı" msgid "Build object" msgstr "Üretim nesnesi" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Üretim nesnesi" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "Seri numaralı stok için miktar bir olmalı" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Tahsis edilen miktar ({q}) mevcut stok miktarını ({a}) aşmamalıdır" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "Stok kalemi fazladan tahsis edilmiş" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Stok Kalemi" @@ -1083,378 +1099,378 @@ msgstr "Hedef stok kalemi" msgid "Build Level" msgstr "Üretim Seviyesi" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Parça Adı" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Üretim Çıktısı" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "Üretim çıktısı üst üretim ile eşleşmiyor" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "Çıktı parçası üretim emri parçası ile eşleşmiyor" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "Bu üretim çıktısı zaten tamamlandı" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "Bu üretim çıktısı tam tahsis edilmedi" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Üretim çıktısının miktarını girin" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "İzlenebilir parçalar için tamsayı miktar gerekir" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Ürün ağacı izlenebilir parçalar içerdiğinden tamsayı miktar gereklidir" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Seri Numaraları" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "Üretim çıktıları için seri numaraları girin" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Üretim çıktısı için stok konumu" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Seri Numaralarını Otomatik Tahsis Et" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "Eşleşen seri numaralı gerekli kalemleri otomatik tahsis et" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Şu seri numaraları zaten varlar veya geçersizler" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "Bir üretim çıktıları listesi sağlanmalıdır" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Hurdaya ayrılan çıktılar için stok konumu" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Ayırmaları İptal Et" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "Hurdaya ayrılan çıktılar için yapılan tüm stok ayırmalarını iptal et" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Üretim çıktı(larını) hurdaya ayırma nedeni" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Tamamlanan üretim çıktıları içi konum" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Tamamlanmamış Ayırmayı Onayla" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "Stok henüz tamamen tahsis edilmemşse çıktıları tamamla" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Tahsis Edilen Stoku Tüket" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Bu üretim için zaten tahsis edilmiş olan tüm stokları tüket" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Tamamlanmamış Çıktıları Kaldır" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "Henüz tamamlanmamış tüm üretim çıktılarını sil" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "İzin verilmedi" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "Bu üretim emri tarafından tüketildi olarak kabul et" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "Bu üretim emrini tamamlamadan önce tahsisi kaldır" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Aşırı Tahsis Edilmiş Stok" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Üretim emrine atanan ek stok kalemlerini nasıl işlemek istersiniz" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "Bazı stok kalemleri aşırı tahsis edilmiştir" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Tahsis Edilmeyeni Kabul Et" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Stok kalemlerinin bu üretim emrine tamamen tahsis edilmediğini kabul et" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "Gerekli stok tamamen tahsis edilemedi" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Tamamlanmamış Kabul et" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "Gereken miktarda üretim çıktısının tamamlanmadığını kabul et" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "Gereken üretim miktarı tamamlanmadı" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "Üretim emrinin açık alt üretim emirleri var" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Üretim emri üretim durumunda olmalıdır" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "Üretim emrinde eksik çıktılar var" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Üretim Satırı" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Üretim çıktısı" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "Üretim çıktısı aynı üretimi göstermelidir" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Üretim Satırı" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part üretim emri ile aynı parçayı göstermelidir" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Kalem stokta olmalıdır" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Mevcut miktar ({q}) aşıldı" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "İzlenen parçaların tahsisi için üretim çıktısı belirtilmelidir" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "İzlenmeyen parçaların tahsisi için üretim çıktısı belirtilemez" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Ayrılma ögeleri sağlanmalıdır" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Parçaların alınacağı stok konumu (herhangi bir konumdan almak için boş bırakın)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Konumu Hariç Tut" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "Bu seçilen konumdan stok kalemlerini hariç tut" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Birbirinin Yerine Kullanılabilir Stok" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Birden fazla konumdaki stok kalemleri birbirinin yerine kullanılabilir" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Yedek Stok" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Yedek parçaların ayrılmasına izin ver" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "İsteğe Bağlı Ögeler" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "İsteğe bağlı BOM kalemlerini üretim emrine tahsis et" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "Tüm Ögeler" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "Takip edilmeyen kalemler" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "Takipli Kalemler" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "Kalem Türü" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "Otomatik tahsis edilecek ürün tipini seçin" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "ML Referansı" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "BOM Parça ID" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "ML Parça Adı" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "Kur" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "Yap" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Tedarikçi Parçası" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Tahsis Edilen Miktar" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Üretim Referansı" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Parça Kategorisi Adı" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Takip Edilebilir" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Devralınmış" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Varyantlara İzin Ver" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "ML Ögesi" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "Üretimde" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Üretim için Planlandı" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Harici Stok" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Mevcut Stok" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Mevcut Yedek Stok" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Mevcut Varyant Stok" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "Tüketilen miktar tahsis edilen miktarı aşıyor" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "Stok tüketimi için isteğe bağlı notlar" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "Üretim kalemi doğru üretim emrini göstermelidir" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "Üretim kalemi tahsisini yinele" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "Üretim satırı doğru üretim emrini göstermelidir" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "Üretim satırı tahsisini yinele" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "En az bir kalem veya satır sağlanmalıdır" @@ -1478,7 +1494,7 @@ msgstr "Beklemede" msgid "Cancelled" msgstr "İptal edildi" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "Geciken Üretim Emri" msgid "Build order {bo} is now overdue" msgstr "{bo} üretim emri şimdi gecikti" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "Link Olanlar" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "Dosya Olanlar" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "Kullanıcının bu ekleri silmek için izni yok" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Kullanıcının bu eki silmek için izni yok" @@ -1534,11 +1550,11 @@ msgstr "Geçerli bir para birimi kodu sağlanmamış" msgid "No plugin" msgstr "Eklenti yok" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Proje Kodu Etiketi" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Güncellendi" @@ -1600,7 +1616,7 @@ msgstr "Anahtar dizesi benzersiz olmalı" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Kullanıcı" msgid "Price break quantity" msgstr "Fiyat kademesi miktarı" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Fiyat" @@ -1633,10 +1649,10 @@ msgstr "Bu web kancasının alındığı uç nokta" msgid "Name for this webhook" msgstr "Bu web kancası için ad" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktif" @@ -1660,11 +1676,11 @@ msgstr "Gizli" msgid "Shared secret for HMAC" msgstr "HMAC için paylaşılan gizli bilgi" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "Mesaj ID" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "Bu mesaj için benzersiz tanımlayıcı" @@ -1714,7 +1730,7 @@ msgstr "Başlık" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Yazar" msgid "Summary" msgstr "Özet" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Oku" @@ -1797,7 +1813,7 @@ msgstr "Eksik dosya" msgid "Missing external link" msgstr "Bozuk dış bağlantı" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "Model türü" @@ -1833,7 +1849,7 @@ msgstr "Dosya Boyutu" msgid "File size in bytes" msgstr "Bayt cinsinden dosya boyutu" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Ek için belirtilen model türü geçersiz" @@ -1861,7 +1877,7 @@ msgstr "Mantıksal anahtar" msgid "State logical key that is equal to this custom state in business logic" msgstr "İş mantığında bu özel duruma eşit olan durum mantıksal anahtarı" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Değer" @@ -1874,7 +1890,7 @@ msgstr "Modeller veritabanına kaydedilecek sayısal değer" msgid "Name of the state" msgstr "Durumun adı" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Etiket" @@ -1930,7 +1946,7 @@ msgstr "Mantık anahtarı, referans durumunun mantık anahtarları içinde olmal msgid "Name must be different from the names of the reference status" msgstr "İsim, referans durumunun isimlerinden farklı olmalıdır" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "Seçim Listesi" @@ -1982,7 +1998,7 @@ msgstr "Varsayılan Girdi" msgid "Default entry for this selection list" msgstr "Bu seçim listesi için varsayılan girdi" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Oluşturuldu" @@ -1998,334 +2014,334 @@ msgstr "Son Güncelleme" msgid "Date and time that the selection list was last updated" msgstr "Seçim listesinin son güncellendiği tarih ve saat" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "Seçim Listesi Girdisi" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "Seçim Listesi Girişleri" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "Bu girdinin ait olduğu seçim listesi" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "Seçim listesi girdisinin değeri" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "Seçim listesi girdisi için etiket" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "Seçim listesi girdisinin açıklaması" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "Bu seçim listesi girdisi aktif mi?" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "Parametre Şablonu" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "Parametre Şablonları" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "Onay kutusu parametrelerinin birimleri olamaz" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "Onay kutusu parametrelerinin seçenekleri olamaz" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "Seçenekler eşsiz olmalıdır" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "Parametre şablon adı benzersiz olmalıdır" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "Bu parametre şablonu için hedef modeli türü" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "Parametre Adı" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "Birim" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "Bu parametre için fiziksel birimler" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "Parametre açıklaması" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "Onay kutusu" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "Bu parametre bir onay kutusu mu?" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "Seçenekler" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "Bu parametre için geçerli seçenekler (virgül ile ayrılmış)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "Bu parametre için seçim listesi" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Etkin" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "Bu parametre şablonu etkin mi?" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "Parametre" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "Parametreler" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "Parametre değeri için geçersiz seçim" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Parametre için belirtilen model türü geçersiz" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "Model ID" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "Bu parametre için hedef modelin ID'si" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Şablon" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "Parametre şablonu" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Veri" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "Parametre Değeri" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Not" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "İsteğe bağlı not alanı" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "Barkod Taraması" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "Barkod verisi" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "Barkodu taratan kullanıcı" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "Zaman damgası" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "Barkod taramasının tarihi ve saati" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "Barkodu işleyen URL uç noktası" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "Bağlam" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "Barkod taraması için bağlam verisi" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "Yanıt" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "Barkod taramasından gelen yanıt verisi" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Sonuç" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "Barkod taraması başarılı mıydı?" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "Bir hata oluştu" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "NVE-ER: E-posta günlüğünün silinmesi korumalı. Silmeye izin vermek için INVENTREE_PROTECT_EMAIL_LOG ayarını False olarak ayarlayın." -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "E-posta İletisi" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "E-posta İletileri" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "Duyuruldu" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "Gönderildi" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "Başarısız" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "Teslim edildi" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "Onaylandı" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "Gelen" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "Giden" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "Yanıt Yok" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "Teslimat Takibi" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "Okumayı Takip Et" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "Tıklamayı Takip Et" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "Global ID" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "Bu ileti için tanımlayıcı (harici sistem tarafından sağlanabilir)" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "Konu Kimliği" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Bu ileti konusu için tanımlayıcı (harici sistem tarafından sağlanabilir)" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "Konu" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "Bu mesaja bağlı konu" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "Öncelik" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "E-Posta Konusu" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "E-posta Konuları" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Anahtar" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "Bu konu için benzersiz anahtar (konuyu tanımlamak için kullanılır)" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "Bu konu için benzersiz tanımlayıcı" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "Dahili Olarak Başlatıldı" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "Bu konu dahili olarak mı başlatıldı?" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "Konunun oluşturulduğu tarih ve saat" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "Konunun son güncellendiği tarih ve saat" @@ -2375,1243 +2391,1259 @@ msgstr "Ayarın bir ortam değişkeni tarafından üstüne yazılıp yazılmadı msgid "Override" msgstr "Üstüne Yaz" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Çalışıyor" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Bekleyen Görevler" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Planlanan Görevler" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Başarısız Görevler" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "Görev ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "Benzersiz Görev ID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Kilit" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Kilit Zamanı" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Görev Adı" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Fonksiyon" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Fonksiyon Adı" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Argümanlar" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Görev Argümanları" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Anahtar Argümanlar" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Anahtar görev argümanları" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Dosya adı" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "Model Tipi" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "Kullanıcının bu model için ek oluşturma veya düzenleme izni yok" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "Kullanıcı bu model için parametre oluşturma veya düzenleme iznine sahip değil" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "Seçim listesi kilitli" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Grup yok" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "Site URL'si yapılandırma tarafından kilitlendi" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Yeniden başlatma gerekli" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Sunucunun yeniden başlatılmasını gerektiren bir ayar değişti" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Bekleyen taşıma işlemleri" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Bekleyen veritabanı taşıma sayısı" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Aktif uyarı kodları" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "Aktif uyarı kodlarının bir sözlüğü" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "Örnek ID" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Bu InvenTree örneği için benzersiz tanımlayıcı" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "Duyuru ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Sunucu durum bilgisinde sunucu ID'sini göster (oturum açılmadan)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Sunucu Örneği adı" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Sunucu örneği için sözce (string) açıklayıcı" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Örnek adını kullan" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Örnek adını başlık çubuğunda kullan" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "`Hakkında` gösterimini kısıtla" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "`Hakkında` kipini yalnızca süper kullanıcılara göster" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Şirket adı" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "Dahili şirket adı" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "Ana URL" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "Sunucu örneğinn temel URL'i" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Varsayılan Para Birimi" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "Fiyat hesaplamaları için temel para birimini seçin" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "Desteklenen Para Birimleri" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "Desteklenen para birimi kodlarının listesi" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "Para Birimi Güncelleme Aralığı" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Döviz kurlarını şu sıklıkla güncelle (etkisizleştirmek için sıfır yapın)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "günler" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "Para Birimi Güncelleme Eklentisi" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "Kullanılacak para birimi güncelleme eklentisi" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "URL'den indir" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "Harici URL'den uzak görseller ve dosyalar indirmeye izin ver" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "İndirme Boyutu Sınırı" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "Uzak görsel için izin verilebilir maksimum indirme boyutu" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "URL'den indirmek için kullanılan kullanıcı aracısı" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Harici URL'lerden görsel ve dosya indirirken kullanılan kullanıcı aracısının (user-agent) değiştirilmesine izin ver (varsayılan için boş bırakın)" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "Sıkı URL Doğrulama" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "URL'leri doğrularken şema tanımlamasını gerekli kıl" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "Güncelleme Kontrol Aralığı" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "Güncellemeleri şu sıklıkla kontrol et (etkisizleştirmek için sıfır yapın)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Otomatik Yedekleme" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "Veritabanı ve ortam dosyalarını otomatik yedeklemeyi etkinleştir" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "Otomatik Yedekleme Aralığı" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "Otomatik yedekleme olayları arasındaki gün sayısını belirtin" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "Görev Silme Aralığı" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "Arkaplan görev sonuçları belirtilen gün sayısı kadar sonra silinecektir" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "Hata Günlüğü Silme Aralığı" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "Hata günlükleri belirtilen gün sayısı kadar sonra silinecektir" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "Bildirim Silme Aralığı" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "Kullanıcı bildirimleri belirtilen gün sayısı kadar sonra silinecektir" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "E-posta Silme Aralığı" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "E-postalar belirtilen gün sayısı sonrasında silinecektir" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "E-posta Kaydını Koru" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "E-posta kayıt girdilerinin silinmesini engelle" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Barkod Desteği" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "Web arayüzünde barkod tarayıcı desteğini etkinleştir" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "Barkod Sonuçlarını Depola" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "Barkod tarama sonuçlarını veritabanına depola" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "Maksimum Barkod Tarama Sayısı" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "Depolanacak maksimum barkod tarama sonuçları sayısı" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "Barkod Girdi Gecikmesi" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "Barkod girdi işleme gecikme süresi" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "Barkod Web Kamerası Desteği" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "Tarayıcıda web kamerası aracılığıyla barkod taramaya izin ver" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "Barkod Verisini Göster" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "Barkod verisini tarayıcıda metin olarak görüntüle" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "Barkod Üreteci Eklentisi" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "Dahili barkod üretimi için kullanılacak eklenti" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "Parça Revizyonları" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "Parça için revizyon alanını etkinleştir" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "Yalnızca Montaj Revizyonu" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "Yalnızca montaj parçaları için revizyona izin ver" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "Montajdan Silmeye İzin Ver" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "Bir montajda kullanılan parçaları silmeye izin ver" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "DPN Regex" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "Parça DPN eşleştirmesi için Düzenli İfade Kalıbı (Regex)" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "Yinelenen DPN'ye İzin Ver" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "Birden çok parçanın aynı DPN'yi paylaşmasına izin ver" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "DPN Düzenlemeye İzin Ver" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "Parçayı düzenlerken DPN değiştirmeye izin ver" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "Parça ML Verisini Kopyala" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "Bir parçayo çoğaltırken varsayılan olarak ML verisini kopyala" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "Parça Parametre Verisini Kopyala" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "Bir parçayı çoğaltırken varsayılan olarak parametre verisini kopyala" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "Parça Test Verisini Kopyala" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "Bir parçayı çoğaltırken varsayılan olarak test verisini kopyala" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "Kategori Paremetre Sablonu Kopyala" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "Parça oluştururken kategori parametre şablonlarını kopyala" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "Parçaları varsayılan olan şablondur" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "Parçalar varsayılan olarak başka bileşenlerden monte edilebilir" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Bileşen" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "Parçalar varsayılan olarak alt bileşen olarak kullanılabilir" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Satın Alınabilir" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "Parçalar varsayılan olarak satın alınabilir" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Satılabilir" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "Parçalar varsayılan olarak satılabilir" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "Parçalar varsayılan olarak takip edilebilir" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Sanal" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "Parçalar varsayılan olarak sanaldır" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "İlgili parçaları göster" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "Bir parça için ilgili parçaları görüntüle" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "Başlangıç Stok Verisi" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "Yeni bir parça eklerken başlangıç stoku oluşturmaya izin ver" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "İlk Tedarikçi Bilgileri" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Yeni bir parça eklerken ilk tedarikçi bilgilerinin oluşturulmasına izin ver" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "Parça Adı Görüntüleme Biçimi" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "Parça adını görüntüleme biçimi" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "Parça Kategorisi Varsayılan Simgesi" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "Parça kategorisi için varsayılan simge (boş bırakılırsa simge kullanılmaz)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "Minimum Fiyatlandırma Ondalık Basamakları" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Fiyat verilerinde görüntülenecek maksimum ondalık hane sayısı" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "Maksimum Fiyatlandırma Ondalık Basamakları" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Fiyat verilerinde görüntülenecek maksimum ondalık hane sayısı" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "Tedarikçi Fiyatlandırmasını Kullan" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Tedarikçi fiyat kademelerini genel fiyat hesaplamalarına dahil et" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "Satın Alma Geçmişini Geçersiz Kılma" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Tarihsel satın alma siparişi fiyatlandırması, tedarikçi fiyat kademelerini geçersiz kılar" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "Stok Kalemi Fiyatlandırmasını Kullan" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Fiyatlandırma hesaplamaları için elle girilen stok verisinin fiyatlandırmasını kullan" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "Stok Kalemi Fiyatlandırma Süresi" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Bu gün sayısından daha eski olan stok kalemlerini fiyatlandırma hesaplamalarından hariç tut" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "Varyant Fiyatlandırması Kullan" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "Genel fiyat hesaplamalarına varyant fiyatlarını dahil et" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "Yalnızca Aktif Varyantlar" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "Varyant fiyatlandırmasını hesaplamak için yalnızca aktif varyant parçaları kullan" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "Fiyatlandırmayı Otomatik Güncelle" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "Dahili veri değişince parça fiyatını otomatik güncelle" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "Fiyatlandırmayı Yeniden Oluşturma Aralığı" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "Parça fiyatlandrımasının otomatik güncellenmesinden önceki gün sayısı" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Dahili Fiyatlar" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "Parçalar için dahili fiyatları etkinleştir" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "Dahili Fiyat Geçersiz Kılma" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "Varsa, dahili fiyatlar fiyat aralığı hesaplarını geçersiz kılar" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "Malzeme listesinde sıfır miktara izin ver" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "Malzeme listesinde bir ürün için sıfır miktarın kabul edilmesini sağlar. Böylece üretim miktarından bağımsız olarak, her üretim için gerekli miktarı belirlemek amacıyla kurulum miktarı kullanılabilir" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "Etiket yazdırmayı etkinleştir" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "Web arayüzünden etiket yazdırmayı etkinleştir" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "Etiket Görseli DPI Değeri" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Görsel dosyaları üretirken etiket yazdırma eklentilerine sağlanacak DPI çözünürlüğü" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Raporları Etkinleştir" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "Rapor üretimini etkinleştir" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "Hata Ayıklama Modu" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "Raporları hata ayıklama modunda oluştur (HTML çıktısı)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "Rapor Hatalarını Günlüğe Kaydet" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "Raporlar üretirken oluşan hataları günlüğe kaydet" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Sayfa Boyutu" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "PDF raporlar için varsayılan sayfa boyutu" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "Parametre Birimlerini Zorunlu Kıl" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "Birimler sağlanırsa, parametre değerleri belirtilen birimlere uymalıdır" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "Küresel Çapta Benzersiz Seri Numaraları" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "Stok kalemleri için seri numaraları küresel çapta benzersiz olmalıdır" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "Tükenen Stoku Sil" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "Bir stok kalemi tükendiğinde varsayılan davranışı belirler" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "Parti Kodu Şablonu" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "Stok kalemleri için varsayılan parti kodları oluşturma şablonu" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "Stok Sona Erme Tarihi" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "Stokun sona erme işlevselliğini etkinleştir" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "Süresi Dolan Stoku Sat" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "Süresi dolan stok satışına izin ver" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "Stok Eskime Süresi" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "Stok kalemlerinin son kullanma tarihinden önce eskimiş sayılacağı gün sayısı" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "Süresi Dolmuş Stoktan Üretim" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "Süresi dolmuş stok ile üretime izin ver" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "Stok Sahipliği Kontrolü" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "Stok konumu ve kalemleri üzerinde sahiplik kontrolünü etkinleştir" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "Varsayılan Stok Konumu Simgesi" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "Stok konumu için varsayılan simge (boşsa simge yok demektir)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "Takılı Stok Kalemlerini Göster" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "Stok tablolarında takılı stok kalemlerini görüntüle" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "Kalemlerin kurulumunu yaparken BOM'u kontrol et" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Takılı stok kalemleri üst parçanın BOM listesinde mevcut olmalıdır" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "Stok Dışı Aktarıma İzin Ver" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Stokta olmayan kalemlerin stok konumları arasında aktarılmasına izin ver" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "Üretim Emri Referans Şablonu" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "Üretim emri referans alanını üretmek için gerekli şablon" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "Sorumlu Sahip Gerektir" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "Her siparişe sorumlu bir yetkili atanmalıdır." -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "Aktif Parça Gerektirir" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "Pasif parçalarla üretim emri oluşturmayı engelle" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "Kilitli Parça Gerekli" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "Kilidi açılmış parçalarla üretim emri oluşturmayı engelle" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "Geçerli BOM gereklidir." -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "BOM henüz doğrulanmadan üretim emri oluşturmayı engelle" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "Kapalı Alt Siparişler Gerekli" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "Tüm alt emirler kapatılana kadar üretim emrini tamamlamayı engelle" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "Harici Üretim Emirleri" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "Harici üretim emri işlevselliğini etkinleştir" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Testler Geçene Kadar Engelle" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Tüm gerekli testler geçene kadar üretim çıktılarını tamamlamayı engelle" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "İade Siparişlerini Etkinleştir" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "Kullanıcı arayüzünde iade siparişi işlevselliğini etkinleştir" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "Kullanıcı arayüzünde iade siparişi işlevselliğini etkinleştirin." -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "İade Sipariş referans alanı oluşturmak için gerekli desen" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "Tamamlanan İade Siparişlerini Düzenle" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "Tamamlandıktan sonra iade siparişlerini düzenlemeye izin ver" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "Satış Siparişi Referans Şablonu" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "Satış Siparişi referans alanını üretmek için gerekli şablon" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "Satış Siparişi Varsayılan Gönderi" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "Satış siparişleriyle varsayılan gönderi oluşturmayı etkinleştir" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "Tamamlanmış Satış Siparişlerini Düzenle" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Gönderilen veya tamamlanan satış siparişlerini düzenlemeye izin ver" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "Kontrol Gerektiren Gönderi" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "Kalemler kontrol edilene dek gönderilerin tamamlanmasını engelle" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "Gönderilen Siparişleri Tamamlandı Olarak İmle" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Gönderildi olarak işaretli satış siparişleri \"gönderildi\" durumu atlanarak otomatik olarak tamamlanacaktır" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "Satın Alma Siparişi Referans Şablonu" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "Satın Alma Siparişi referans alanını üretmek için gerekli şablon" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "Tamamlanan Satın Alma Siparişlerini Düzenle" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Gönderildikten veya tamamlandıktan sonra satın alma siparişlerini düzenlemeye izin ver" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "Para Birimini Dönüştür" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "Stok alınırken kalem değerini temel para birimine dönüştür" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "Satın Alma Siparişlerini Otomatik Tamamla" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Tüm satırlar alındığında satın alma siparişini otomatikmen tamamlandı olarak işaretle" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Şifremi unuttum seçeneğini etkinleştir" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "Giriş yapma sayfasında şifremi unuttum işlevini etkinleştir" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Kayıt olmayı etkinleştir" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "Giriş yapma sayfalarında kullanıcılar için kendini kaydetme işlevini etkinleştir" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "SSO Etkinleştir" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "Kullanıcı girişi sayfalarında SSO etkinleştir" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "SSO ile kayıt olmayı etkinleştir" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Giriş yapma sayfalarında kullanıcılar için SSO ile kendini kaydetmeyi etkinleştir" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "SSO grup eşitlemeyi etkinleştir" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "InvenTree gruplarını IdP tarafından sağlanan gruplar ile eşitlemeyi etkinleştir" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "SSO grup anahtarı" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "IdP tarafından sağlanan talep özniteliğinin adı" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "SSO grup haritası" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "SSO gruplarından yerel InvenTree gruplarına bir eşleme. Yerel grup yoksa, oluşturulacaktır." -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "SSO dışındaki grupları kaldır" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "IdP arka ucu tarafından olmayan, kullanıcıya atanmış grupların kaldırılıp kaldırılmayacağı. Bu ayarı etkisizleştirmek güvenlik sorunlarına neden olabilir" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "E-posta Gerekir" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "Üyelik sırasında kullanıcının eposta sağlamasını gerektir" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "SSO kullanıcıları otomatik doldur" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "Kullanıcı ayrıntılarını TOA hesabı verisinden otomatik olarak doldur" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "Postayı iki kez gir" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "Hesap oluştururken kullanıcıların postalarını iki kez girmelerini iste" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Şifreyi iki kez gir" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "Hesap oluştururken kullanıcıların şifrelerini iki kez girmesini iste" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "Alanlara izin ver" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Belirli alanlara hesap açmayı kısıtla (virgülle ayrılmış, @ ile başlayan)" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "Hesap oluştururken grup" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Yeni kullanıcıların kayıt sırasında atanacağı grup. Eğer TOA grup eşitlemesi etkinse, yalnızca ıdP'den hiçbir grup atanamazsa bu grup ayarlanır." -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "ÇFKD'yi Zorunlu Kıl" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "Kullanıcıların çok faktörlü kimlik doğrulamasını kullanması gerekmektedir." -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "Bu ayarı etkinleştirmek, tüm kullanıcıların çok faktörlü kimlik doğrulamayı ayarlamasını gerektirecektir. Tüm oturumlar hemen kapatılacaktır." -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "Başlangıçta eklentileri kontrol et" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Başlangıçta tüm eklentilerin kurulmuş olduğunu kontrol et - konteyner ortamlarında etkinleştir" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "Eklenti güncellemelerini kontrol et" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "Kurulu eklentiler için periyodik güncelleme kontrolünü etkinleştir" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "URL entegrasyonunu etkinleştir" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "URL yönlendirmesi eklemek için eklentileri etkinleştir" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "Gezinti entegrasyonunu etkinleştir" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "Eklentilerin gezintiye entegre edilmesini etkinleştir" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "Uygulama entegrasyonunu etkinleştir" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "Uygulamalar eklemek için eklentileri etkinleştir" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "Zamanlama entegrasyonunu etkinleştir" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "Zamanlanmış görevleri çalıştırmak için eklentileri etkinleştir" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "Olay entegrasyonunu etkinleştir" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "Eklentilerin olaylara yanıt verebilmesini etkinleştirin" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "Arayüz entegrasyonunu etkinleştir" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "Eklentilerin kullanıcı arayüzüne entegre olmasını etkinleştir" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "Posta entegrasyonunu etkinleştir" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Eklentilerin giden/gelen postaları işlemesini etkinleştir" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "Proje kodlarını etkinleştir" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "Projeleri izlemek için proje kodlarını etkinleştir" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "Stok Sayımını Etkinleştir" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "Geçmiş stok seviyelerini ve değerini kaydetme işlevini etkinleştir" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "Harici Konumları Hariç Tut" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Harici konumlardaki stok kalemlerini stok geçmişi hesaplamalarının dışında tut" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "Otomatik Stok Sayımı Periyodu" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "Otomatik stok geçmişi kaydı arasındaki gün sayısı" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "Eski Stok Geçmişi Girdilerini Sil" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "Belirtilen gün sayısından daha eski stok geçmişi girdilerini sil" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "Stok Geçmişi Silme Aralığı" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "Stok geçmişi girdileri belirtilen gün sayısı sonrasında silinecektir" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "Eski Stok Geçmişi Girdilerini Sil" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "Belirtilen gün sayısından daha eski stok geçmişi girdilerini sil" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "Stok Geçmişi Silme Aralığı" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "Stok geçmişi girdileri belirtilen gün sayısı sonrasında silinecektir" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "Kullancıların tam isimlerini görüntüle" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "Kullanıcı adı yerine kullanıcıların tam adlarını görüntüle" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "Kullanıcı Profillerini Göster" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "Kullanıcıların Profillerini kendi profil sayfalarında göster" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "Test İstasyon Verisini Etkinleştir" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "Test sonuçları için test istasyonundan veri toplamayı etkinleştir" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "Makine Pingini Etkinleştir" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Durumlarını kontrol etmek için kayıtlı makinelerin periyodik ping görevini etkinleştir" @@ -3956,33 +3988,33 @@ msgstr "Parça Aktif" msgid "Manufacturer is Active" msgstr "Üretici Aktif" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Tedarikçi Parçası Aktif" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "Ana Tedarikçi Parçası" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Dahili Parça Aktif" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Tedarikçi Aktif" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Üretici" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Şirket" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "Stoku Var" @@ -4071,7 +4103,7 @@ msgstr "Vergi Numarası" msgid "Company Tax ID" msgstr "Şirket Vergi Numarası" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Adres" @@ -4163,7 +4195,7 @@ msgstr "Dahili kullanım için sevkiyat notları" msgid "Link to address information (external)" msgstr "Adres bilgisine bağlantı (harici)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Üretici Parçası" @@ -4181,12 +4213,12 @@ msgstr "Parça seçin" msgid "Select manufacturer" msgstr "Üretici seçin" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "ÜPN" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Üretici Parça Numarası" @@ -4210,8 +4242,8 @@ msgstr "Paket birimleri sıfırdan büyük olmalıdır" msgid "Linked manufacturer part must reference the same base part" msgstr "Bağlantılı üretici parçası aynı temel parçayı referans almalıdır" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Tedarikçi" msgid "Select supplier" msgstr "Tedarikçi seçin" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Tedarikçi stok kodu" @@ -4258,8 +4290,8 @@ msgstr "temel maliyet" msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimum ücret (örneğin stoklama ücreti)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Paketleme" @@ -4307,14 +4339,18 @@ msgstr "Bu tedarikçi için kullanılan varsayılan para birimi" msgid "Company Name" msgstr "Şirket Adı" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Stokta" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "Fiyat Kademeleri" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Veri dışa aktarma sırasında hata oluştu" @@ -4419,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "Kayıt için mevcut veritabanı tanımlayıcısı" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "Sütun zaten bir veritabanı alanına eşlenmiştir" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "Alan zaten bir veri sütununa eşlenmiştir" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "Sütun eşlemesi geçerli bir içe aktarma oturumuna bağlanmalıdır" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "Sütun veri dosyasında bulunmuyor" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "Alan hedef modelde bulunmuyor" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "Seçilen alan salt okunurdur" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "Oturumu İçe Aktar" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "Alan" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "Sütun" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "Satır İndeksi" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "Orijinal satır verisi" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "Hatalar" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Geçerli" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "Mevcut kayıtları güncellemek için ID gereklidir." -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "Sağlanan ID ile kayıt bulunamadı" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "Sağlanan ID biçimi geçersiz" @@ -4579,7 +4615,7 @@ msgstr "Her etiket için yazdırılacak kopya sayısı" msgid "Connected" msgstr "Bağlı" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Bilinmeyen" @@ -4711,7 +4747,7 @@ msgstr "İlerleme türünün maksimum değeri, tür=ilerleme ise gerekli" msgid "Order Reference" msgstr "Sipariş Referansı" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Açık" @@ -4767,11 +4803,11 @@ msgstr "Güncellendi (den sonra)" msgid "Has Pricing" msgstr "Fiyatlandırılmış" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Öncesinde Tamamlandı" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Sonrasında Tamamlandı" @@ -4779,17 +4815,17 @@ msgstr "Sonrasında Tamamlandı" msgid "External Build Order" msgstr "Harici Üretim Emri" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "Sipariş" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Sipariş Tamamlandı" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Dahili Parça" @@ -4797,27 +4833,27 @@ msgstr "Dahili Parça" msgid "Order Pending" msgstr "Sipariş Bekliyor" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Tamamlandı" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Sevkiyatı Var" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Satın Alma Siparişi" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "Satın Alma Siparişi" msgid "Sales Order" msgstr "Satış Siparişi" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "Adres bilgileri seçilen şirketle eşleşmiyor" msgid "Order description (optional)" msgstr "Açıklama (isteğe bağlı)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "Bu sipariş için proje kodu seçin" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "Harici sayfaya bağlantı" @@ -4886,7 +4922,7 @@ msgstr "Başlangıç ​​tarihi" msgid "Scheduled start date for this order" msgstr "Bu üretim emri için planlanan başlangıç tarihi" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Hedeflenen tarih" @@ -4919,413 +4955,421 @@ msgstr "Bu sipariş için ilgili kişi" msgid "Company address for this order" msgstr "Bu sipariş için şirket adresi" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "Sipariş referansı" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Durum" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "Satın alma siparişi durumu" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "Ürünlerin sipariş edilmekte olduğu şirket" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "Tedarikçi Referansı" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "Tedarikçi siparişi referans kodu" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "teslim alan" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "Siparişin tamamlandığı tarih" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "Hedef" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "Teslim alınan kalemler için varış yeri" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "Parça tedarikçisi PO tedarikçisi ile eşleşmelidir" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "Satır, satın alma siparişi ile eşleşmiyor" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "Satırda bağlantılı bir parça eksik" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "Miktar pozitif bir sayı olmalıdır" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Müşteri" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "Ürünlerin satılmakta olduğu şirket" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "Satış siparişi durumu" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "Müşteri Referansı " -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "Müşteri siparişi referans kodu" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "Sevkiyat Tarihi" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "tarafından sevk edildi" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "Sipariş zaten tamamlandı" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "Sipariş zaten iptal edildi" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "Yalnızca açık siparişler tamamlandı olarak işaretlenebilir" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Tamamlanmamış sevkiyatlar olduğundan sipariş tamamlanamaz" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Tamamlanmamış tahsisatlar olduğundan sipariş tamamlanamaz" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "Tamamlanmamış satırlar olduğundan sipariş tamamlanamaz" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "Bu sipariş kilitli olduğundan değiştirilemez" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "Kalem miktarı" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1822 msgid "Line item reference" msgstr "Satır referansı" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "Satır notları" -#: order/models.py:1822 +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Bu satır için hedef tarih (siparişin hedef tarihini kullanmak için boş bırakın)" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "Satır açıklaması (isteğe bağlı)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "Bu satır için ek bağlam" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "Birim Fiyat" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "Satın Alma Siparişi Kalemi" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "Tedarikçi parçası tedarikçi ile eşleşmelidir" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "Üretim emri harici olarak işaretlenmelidir" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "Üretim emirleri yalnızca montaj parçalarına bağlanabilir" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "Üretim emri parçası satır parçası ile eşleşmelidir" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "Tedarikçi parçası" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "Teslim Alındı" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "Teslim alınan miktar" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Alış Fiyatı" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "Birim alış fiyatı" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "Bu kalem tarafından karşılanacak harici Üretim Emri" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "Ek Sipariş Kalemi" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "Satış Siparişi Kalemi" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "Yalnızca satışa uygun parçalar bir satış siparişine atanabilir" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Satış Fiyatı" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "Birim satış fiyatı" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Sevk edildi" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "Sevk edilen miktar" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "Satış Siparişi Sevkiyatı" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "Sevk adresi müşteri ile eşleşmelidir" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "Bu sevkiyatın sevk adresi" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "Sevkiyat tarihi" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "Teslimat Tarihi" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "Sevkiyatın teslimat tarihi" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "Kontrol Eden" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "Bu sevkiyatı kontrol eden kullanıcılar" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Sevkiyat" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "Sevkiyat numarası" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "Takip Numarası" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "Sevkiyat takip numarası" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "Fatura Numarası" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "Fatura referans numarası" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "Sevkiyat zaten sevk edildi" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "Sevkiyatın tahsis edilen stok kalemleri bulunmuyor" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "Sevkiyat tamamlanmadan önce kontrol edilmelidir" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "Ek Sipariş Kalemi" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "Satış Siparişi Tahsisatı" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "Stok kalemi henüz atanmadı" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "Farklı bir parçaya sahip satıra stok kalemi tahsis edilemez" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "Parça içermeyen bir satıra stok tahsis edilemez" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Tahsis miktarı stok miktarını aşamaz" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Seri numaralı stok kalemi için miktar 1 olmalıdır" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "Satış siparişi sevkiyatla eşleşmiyor" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Sevkiyat satış siparişiyle eşleşmiyor" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Satır" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "Satış siparişinin sevkiyat referansı" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "Kalem" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "Tahsis edilecek stok kalemini seçin" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "Stok tahsis miktarını girin" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "İade Siparişi referansı" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "Ürünlerin iade edildiği şirket" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "İade siparişi durumu" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "İade Siparişi Satırı" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "Stok kalemi belirtilmelidir" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "İade miktarı stok miktarını aşıyor" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "İade miktarı sıfırdan büyük olmalıdır" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "Seri numaralı stok kalemi için geçersiz miktar" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "Müşteriden iade edilecek ürünü seçin" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "Teslim Alma Tarihi" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "Bu iade kaleminin teslim alındığı tarih" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "Sonuç" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "Bu satırın sonucu" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "Bu kalem için iade veya onarımla ilgili maliyet" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "Ek Sipariş Kalemi" @@ -5353,7 +5397,7 @@ msgstr "Ek Kalemleri Kopyala" msgid "Copy extra line items from the original order" msgstr "Orijinal siparişten ek kalemleri kopyala" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Parametreleri Kopyala" @@ -5372,216 +5416,216 @@ msgstr "Satırlar" msgid "Completed Lines" msgstr "Tamamlanan Satırlar" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "Siparişin Kopyasını Oluştur" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "Bu siparişin kopyasını oluşturmak için seçenekleri belirtin" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "Geçersiz sipariş ID" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Tedarikçi Adı" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Sipariş iptal edilemez" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Satır eksiği olan siparişin kapatılmasına izin ver" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Siparişin eksik satırları var" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Sipariş açık değil" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Otomatik Fiyatlandırma" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Tedarikçi parça verilerine göre satın alma fiyatını otomatik olarak hesapla" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Satın alma fiyatı para birimi" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Kalemleri Birleştir" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Aynı parça, hedef ve hedef tarihe sahip kalemleri tek bir satırda birleştir" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Dahili Parça Numarası" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Dahili Parça Adı" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Tedarikçi parçası belirtilmeli" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Satın alma siparişi belirtilmeli" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Tedarikçi satın alma siparişi ile eşleşmelidir" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Satın alma siparişi tedarikçi ile eşleşmelidir" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Satır" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Teslim alınan kalemler için varış konumunu seçin" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Gelen stok kalemleri için parti numarası girin" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Son Kullanma Tarihi" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Gelen stok kalemleri için son kullanma tarihi girin" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Gelen stok kalemlerinin seri numaralarını girin" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Gelen stok kalemlerinin paketleme bilgilerini geçersiz kıl" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Gelen stok kalemleri için ek not" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Barkod" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Taranan barkod" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Barkod zaten kullanımda" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Satırlar sağlanmalıdır" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Hedef konum belirtilmelidir" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Sağlanan barkod değerleri benzersiz olmalıdır" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Sevkiyatlar" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Tamamlanan Sevkiyatlar" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "Tahsis Edilen Kalemler" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Satış para birimi" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Tahsis Edilen Kalemler" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Sevkiyat bilgileri sağlanmadı" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Ürün kalemi bu siparişle ilişkilendirilmemiştir" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Miktar pozitif olmalıdır" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Tahsis edilecek seri numaralarını girin" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Sevkiyat zaten sevk edildi" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Sevkiyat bu sipariş ile ilişkilendirilmemiştir" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Şu seri numaraları için bir eşleşme bulunamadı" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Şu seri numaraları mevcut değildir" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "İade siparişi kalemi" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Ürün kalemi iade siparişi ile eşleşmiyor" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Ürün kalemi zaten teslim alındı" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Ürün kalemleri yalnızca işlemdeki siparişlere istinaden teslim alınabilir" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "İade olacak miktar" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Satır para birimi" @@ -5797,7 +5841,7 @@ msgstr "Bu kategoridaki parçalar için varsayılan anahtar kelimeler" msgid "Icon" msgstr "Simge" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Simge (isteğe bağlı)" @@ -5818,7 +5862,7 @@ msgstr "Varsayılan Değer" msgid "Default Parameter Value" msgstr "Varsayılan Parametre Değeri" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Parçalar" @@ -5933,7 +5977,7 @@ msgstr "Arama sonuçlarında görünürlüğü artırmak için parça anahtar ke msgid "Part category" msgstr "Parça kategorisi" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "DPN" @@ -5942,7 +5986,7 @@ msgstr "DPN" msgid "Part revision or version number" msgstr "Parça revizyon veya versiyon numarası" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Revizyon" @@ -5966,7 +6010,7 @@ msgstr "Varsayılan Son Kullanma" msgid "Expiry time (in days) for stock items of this part" msgstr "Bu parçanın stok kalemleri için son kullanma süresi (gün olarak)" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Minimum Stok" @@ -6447,355 +6491,355 @@ msgstr "Bir parça ile kendisi arasında parça ilişkisi oluşturulamaz" msgid "Duplicate relationship already exists" msgstr "Kopyalanan ilişki zaten mevcut" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "Üst Kategori" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "Üst parça kategorisi" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Alt kategoriler" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Sonuçlar" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "Bu şablon ile ilişkilendirilmiş sonuç sayısı" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Bu stok kaleminin alış para birimi" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "Dosya bir görsel değil" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Orijinal Parça" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Kopyalanacak orijinal parçayı seçin" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Görseli Kopyala" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Orijinal parçadan görseli kopyala" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "BOM'u Kopyala" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "Orijinal parçadan ürün ağacını kopyala" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "Orijinal parçadan parametreleri kopyala" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Notları Kopyala" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Orijinal parçadan notları kopyala" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "Testleri Kopyala" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "Orijinal parçadan test şablonlarını kopyala" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Başlangıç Stok Miktarı" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Bu parça için başlangıç stok miktarını belirtin. Miktar sıfır ise, stok eklenmez." -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Başlangıç Stok Konumu" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "Bu parça için başlangıç stok konumunu belirtin" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Tedarikçiyi seçin (veya atlamak için boş bırakın)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "Üreticiyi seçin (veya atlamak için boş bırakın)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Üretici parça numarası" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "Seçilen şirket geçerli bir tedarikçi değildir" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "Seçilen şirket geçerli bir üretici değildir" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "Bu MPN ile eşleşen üretici parçası zaten mevcut" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "Bu SKU ile tedarikçi parçası zaten mevcut" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Kategori Adı" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Üretiliyor" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "Bu parçanın şu anda üretimde olan miktarı" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Bu parçanın üretilmesi planlanan açık miktarı" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Stok Kalemleri" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "Revizyonlar" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Toplam Stok" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "Tahsis Edilmemiş Stok" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "Varyant Stoku" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Parçanın Kopyasını Oluştur" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "Başlangıç verisini diğer parçadan kopyala" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Başlangıç Stoku" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "Başlangıç stok miktarı ile parça oluştur" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "Tedarikçi Bilgileri" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "Bu parça için ilk tedarikçi bilgilerini ekleyin" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Kategori Parametrelerini Kopyala" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "Seçilen parça kategorisinden parametre şablonlarını kopyala" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Mevcut Görsel" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "Mevcut parça görselinin dosya adı" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Görsel dosyası mevcut değil" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Tüm ürün ağacını doğrula" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Üretebilir Miktar" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "Üretim Emirleri için Gerekli" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "Üretim Emirlerine Tahsis Edildi" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "Satış Siparişleri için Gerekli" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "Satış Siparişlerine Tahsis Edildi" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "Parça DPN" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "Parça Açıklaması" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "Stok sayımı bilgisi oluşturmak üzere bir parça (ve varsa varyantlarını) seçin" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "Kategorideki (ve alt kategorilerdeki) tüm parçaları dahil etmek için bir kategori seçin" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "Konumda (ve alt konumlarda) stoğu bulunan tüm parçaları dahil etmek için bir konum seçin" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "Stok Sayımı Kayıtları Oluşturun" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "Seçili parçalar için stok sayımı girdilerini kaydedin" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "Rapor Oluştur" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "Seçili parçalar için stok sayımı raporu oluşturun" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Minimum Fiyat" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Minimum fiyat için hesaplanan değeri geçersiz kıl" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Minimum fiyat para birimi" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Maksimum Fiyat" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Maksimum fiyat için hesaplanan değeri geçersiz kıl" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Maksimum fiyat para birimi" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Güncelle" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Bu parçanın fiyatlandırmasını güncelle" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Sağlanan para birimlerinden {default_currency} para birimine dönüştürülemedi" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "Minimum fiyat maksimum fiyattan yüksek olamaz" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "Maksimum fiyat minimum fiyattan düşük olamaz" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "Miktar sıfır veya daha büyük olmalıdır" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "Üst montajı seçin" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "Bileşeni seçin" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "BOM'u kopyalanacak parçayı seçin" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Mevcut Verileri Temizle" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "Kopyalamadan önce mevcut BOM kalemlerini temizle" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Devralınanı Dahil Et" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "Şablon parçalardan devralınan BOM kalemlerini dahil et" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Geçersiz Satırları Atla" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "Geçersiz satırları atlamak için bu seçeneği etkinleştir" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Muadil Parçaları Kopyala" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "BOM kalemlerinin kopyasını oluştururken muadil parçaları kopyala" @@ -7516,7 +7560,7 @@ msgstr "Kenarlık" msgid "Print a border around each label" msgstr "Her etiketin etrafına kenarlık ekle" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "Yatay" @@ -7596,64 +7640,77 @@ msgstr "TME barkodları taraması için destek sağlar" msgid "The Supplier which acts as 'TME'" msgstr "'TME' rolünü üstlenen tedarikçi" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Eklentileri yalnızca yetkili personel yönetebilir" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "Eklenti kurulumu devre dışı bırakıldı" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Eklenti kurulumu başarılı" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Eklenti {path} yoluna kuruldu" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "Eklenti kayıt defterinde bulunamadı" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "Eklenti paketlenmiş bir eklenti değildir" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Eklenti paketi adı bulunamadı" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Eklentileri yalnızca yetkili personel yönetebilir" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "Eklenti kaldırma devre dışı bırakıldı" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "Bu eklenti şu an aktif olduğundan kaldırılamaz" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "Eklenti zorunlu olduğu için kaldırılamaz" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "Eklenti örnek bir eklenti olduğu için kaldırılamaz" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "Eklenti yerleşik bir eklenti olduğu için kaldırılamaz" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "Eklenti kurulu değil" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Eklenti kurulumu bulunamadı" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Eklenti başarıyla kaldırıldı" @@ -7900,55 +7957,55 @@ msgstr "Kurulum onaylanmadı" msgid "Either packagename or URL must be provided" msgstr "Paket adı veya URL'den biri belirtilmelidir" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Tam yeniden yükleme" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Eklenti kayıt defterini tamamen yeniden yükle" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Yeniden yüklemeye zorla" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Eklenti kayıt defterini, zaten yüklenmiş olsa bile yeniden yüklemeye zorla" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Eklentileri topla" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Eklentileri topla ve kayıt defterine ekle" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Eklentiyi Aktifleştir" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Bu eklentiyi aktifleştir" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "Zorunlu eklenti pasifleştirilemez" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Yapılandırmayı sil" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Eklenti yapılandırmasını veritabanından sil" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "Bu ayarların uygulanacağı kullanıcı" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "Kalemler" @@ -7964,7 +8021,7 @@ msgstr "Eklenti, etiket yazdırmayı desteklemiyor" msgid "Invalid label dimensions" msgstr "Geçersiz etiket boyutları" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "Şablona geçerli öge sağlanmadı" @@ -7988,152 +8045,156 @@ msgstr "Harf" msgid "Template file with this name already exists" msgstr "Aynı isimde bir şablon zaten mevcut" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "Şablon adı" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "Şablon açıklaması" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "Revizyon numarası (otomatik artar)" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "Yazdırmada Modele Ekle" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "Yazdırırken rapor çıktısını bağlantılı model örneğine ek olarak kaydet" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "Dosya Adı Deseni" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "Dosya adları oluşturmak için desen" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "Şablon etkinleştirildi" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "Şablon için hedef model türü" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Filtreler" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "Şablon sorgu filtreleri (virgülle ayrılmış anahtar=değer çiftleri listesi)" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "Şablon dosyası" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "PDF raporları için sayfa boyutu" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "Raporu yatay yönde işle" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "Birleştir" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "Seçili ögeler için tek bir rapor oluştur" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "{self.name} şablonundan oluşturulan rapor" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "Şablon sözdizimi hatası" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "Rapor işleme hatası" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "Rapor oluşturma hatası" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "Rapor çıktılarını birleştirme hatası" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Genişlik [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "Etiket genişliği mm olarak belirtilmeli" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Yükseklik [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "Etiket yüksekliği mm olarak belirtilmeli" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "Etiket yazdırma hatası" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "Parçacık" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "Rapor parçacık dosyası" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "Parçacık dosyası açıklaması" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "Kaynak Dosyası" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "Rapor kaynak dosyası" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "Kaynak dosyası açıklaması" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "Rapor şablonu seç" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "Rapora dahil edilecek öge birincil anahtarlarının listesi" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "Etiket Şablonu Seç" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "Yazdırma Eklentisi" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "Etiket yazdırma için kullanılacak eklentiyi seç" @@ -8231,7 +8292,7 @@ msgstr "Stok Kalemi Test Raporu" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Takılı Kalemler" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "part_image etiketi bir parça örneği gerektirir" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "company_image etiketi bir şirket örneği gerektirir" @@ -8304,7 +8365,7 @@ msgstr "Üst seviye konumlara göre filtrele" msgid "Include sub-locations in filtered results" msgstr "Filtrelenmiş sonuçlara alt konumları dahil et" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "Üst Konum" @@ -8388,7 +8449,7 @@ msgstr "Son kullanma tarihi öncesi" msgid "Expiry date after" msgstr "Son kullanma tarihi sonrası" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Bozuk" @@ -8522,7 +8583,7 @@ msgstr "Parça belirtilmelidir" msgid "Stock items cannot be located into structural stock locations!" msgstr "Stok kalemleri yapısal stok konumlarına yerleştirilemez!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Sanal parçalar için stok kalemi oluşturulamaz" @@ -8567,7 +8628,7 @@ msgstr "Bu stok kalemiyle eşleşen bir tedarikçi parçası seçin" msgid "Where is this stock item located?" msgstr "Bu stok kalemi nerede bulunur?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Bu stok kaleminin ambalajı şu şekilde saklanmaktadır" @@ -8583,7 +8644,7 @@ msgstr "Bu öge başka bir ögeye takılı mı?" msgid "Serial number for this item" msgstr "Bu öge için seri numarası" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Bu stok kalemine ait parti kodu" @@ -8696,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Tedarikçi Parça Numarası" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "Bu parçaya seri numarası atanamaz" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Seri numaraları zaten mevcut" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Takılacak stok kalemini seçin" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Miktar" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Takılacak kalemlerin miktarını girin" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "İşlem notu ekle (isteğe bağlı)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "Miktar en az \"1\" olmalıdır" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Stok kalemi mevcut değil" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "Seçilen parça malzeme listesinde bulunamadı" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "Takılacak miktar, mevcudu geçmemeli" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Sökülen ürün için hedef konum" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "Stok kaleminin dönüştürüleceği parçayı seçin" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "Seçilen parça dönüştürülmeye uygun değil" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Tedarikçi parçası atanmış stok kalemi dönüştürülemez" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Stok kalemi durum kodu" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Durumu değiştirilecek stok kalemlerini seçin" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Hiçbir stok kalemi seçilmedi" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Alt konumlar" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "Üst stok konumu" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Parça satılabilir olmalıdır" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "Ürün bir satış siparişine tahsis edilmiştir" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "Ürün bir üretim emrine tahsis edilmiştir" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "Stok kalemlerini atamak için müşteri" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "Seçilen şirket bir müşteri değil" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Stok tahsis notları" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "Bir stok kalemleri listesi girilmelidir" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Stok birleştirme notları" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Farklı tedarikçilere izin ver" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "Farklı tedarikçi parçalarına sahip stokları birleştirmeye izin ver" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Farklı durumlara sahip kalemlere izin ver" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "Farklı durum kodlarına sahip stokları birleştirmeye izin ver" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "En az iki stok kalemi girilmelidir" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "Değişiklik Yok" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Stok Kalemi birincil anahtar (PK) değeri" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "Stok kalemi mevcut stokta yok" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "Stok kalemi zaten stokta" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "Miktar negatif olamaz" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Stok aktarım notları" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "Mevcut stokla birleştir" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "Mümkünse iade edilen ürünleri mevcut stoklarla birleştir" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "Sıradaki Seri Numarası" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "Önceki Seri Numarası" @@ -9541,83 +9602,99 @@ msgstr "Satış Siparişleri" msgid "Return Orders" msgstr "İade Emirleri" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Kullanıcı Adı" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Adı" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Kullanıcının adı" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Soyadı" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Kullanıcının soyadı" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Kullanıcının e-posta adresi" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Personel" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Bu kullanıcının personel izinleri var mı" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Süper Kullanıcı" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Bu kullanıcı bir süper kullanıcı mı" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Bu kullanıcı hesabı aktif mi" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Bu alanı sadece bir yönetici değiştirebilir" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "Parola" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Kullanıcının parolası" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "Uyarıları yok say" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Şifre kuralları uyarılarını yok say" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "Kullanıcı yaratmak için yetkiniz yok" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Kullanıcı hesabınız oluşturulmuştur." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Giriş yapmak için lütfen şifre sıfırlama fonksiyonunu kullanınız" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "InvenTree'ye Hoşgeldiniz" diff --git a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po index 0c15144167..7ad5da86d5 100644 --- a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -49,7 +49,7 @@ msgstr "" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "У користувача немає дозволу на перегляд цієї моделі" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Не вдалося перетворити {original} на {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Невірна кількість" @@ -104,13 +104,13 @@ msgstr "Введіть дату" msgid "Invalid decimal value" msgstr "Неправильне десяткове значення" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Нотатки" @@ -123,75 +123,91 @@ msgstr "Значення '{name}' не відповідає шаблону фо msgid "Provided value does not match required pattern: " msgstr "Надане значення не відповідає обов'язковому шаблону: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Неможливо серіалізувати більше ніж 1000 сутностей за раз" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Пустий серійний номер" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Видаліть HTML тег з цього значення" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "Дані містять заборонений вміст у форматі Markdown" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Помилка підключення" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Сервер відправив некоректний код статусу" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Відбулося виключення" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Сервер повернув невірне значення Content-Length" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Розмір зображення занадто великий" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Розмір зображення перевищує максимально дозволений розмір" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Віддалений сервер повернув пусту відповідь" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "" @@ -199,7 +215,7 @@ msgstr "" msgid "Log in to the app" msgstr "Авторизуватися в додатку" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Електронна пошта" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Назва" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Опис" msgid "Description (optional)" msgstr "Опис (опціонально)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Шлях" @@ -320,51 +336,51 @@ msgstr "" msgid "Image" msgstr "Зображення" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "Китайська (спрощена)" msgid "Chinese (Traditional)" msgstr "Китайська (Традиційна)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "" @@ -545,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Деталь" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -653,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Розхідний матеріал" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Збірка" @@ -671,32 +687,32 @@ msgstr "Збірка" msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Тестуємо" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Доступно" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" @@ -704,26 +720,26 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Місце" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "" @@ -845,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "" @@ -875,7 +891,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" @@ -948,7 +964,7 @@ msgstr "" msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "" @@ -964,23 +980,23 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" @@ -1001,10 +1017,10 @@ msgstr "" msgid "Build object" msgstr "" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" @@ -1083,378 +1099,378 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Дозволити варіанти" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "У виробництві" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1534,11 +1550,11 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "" @@ -1600,7 +1616,7 @@ msgstr "" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Користувач" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Ціна" @@ -1633,10 +1649,10 @@ msgstr "" msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1660,11 +1676,11 @@ msgstr "" msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "" @@ -1714,7 +1730,7 @@ msgstr "Назва" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "" msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "" @@ -1797,7 +1813,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "Розмір файлу" msgid "File size in bytes" msgstr "Розмір файлу в байтах" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "Етикетка" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "Список вибору" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "" @@ -1998,334 +2014,334 @@ msgstr "" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "Прапорець" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Шаблон" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Дані" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Примітка" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Компонент" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Доступний для продажу" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Віртуальний" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "Показати пов'язані деталі" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Чи призначені групи користувачеві повинні бути видалені, якщо вони не є резервним сервером IdP. Відключення цього налаштування може спричинити проблеми безпеки" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "Позиція активна" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Позиція постачальника активна" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Внутрішня позиція активна" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Виробник" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "" @@ -4163,7 +4195,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Позиція виробника" @@ -4181,12 +4213,12 @@ msgstr "Обрати позицію" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "" @@ -4210,8 +4242,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "" @@ -4258,8 +4290,8 @@ msgstr "Базова вартість" msgid "Minimum charge (e.g. stocking fee)" msgstr "Мінімальний платіж (напр. комісія за збереження)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4307,14 +4339,18 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "В наявності" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Дійсно" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Внутрішній компонент" @@ -4797,27 +4833,27 @@ msgstr "Внутрішній компонент" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4919,413 +4955,421 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "" -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "" -#: order/models.py:1800 -msgid "Line item reference" +#: order/models.py:1814 +msgid "Line Number" msgstr "" -#: order/models.py:1807 -msgid "Line item notes" +#: order/models.py:1815 +msgid "Line number for this item (optional)" msgstr "" #: order/models.py:1822 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1829 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "" @@ -5372,216 +5416,216 @@ msgstr "" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5797,7 +5841,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5818,7 +5862,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Позиції" @@ -5933,7 +5977,7 @@ msgstr "" msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Ревізія" @@ -5966,7 +6010,7 @@ msgstr "" msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Мінімальний запас" @@ -6447,355 +6491,355 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "Результати" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Виробничий номер позиції" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Початковий запас" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Наявне зображення" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Мінімальна ціна" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Максимальна ціна" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7516,7 +7560,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "" @@ -7596,64 +7640,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "" msgid "Expiry date after" msgstr "" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" @@ -8567,7 +8628,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" @@ -8583,7 +8644,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" @@ -8696,7 +8757,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Ім`я" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Прізвище" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Адреса електронної пошти користувача" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Персонал" - -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:240 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" + +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po index a96958ba06..0d92420b68 100644 --- a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" @@ -49,7 +49,7 @@ msgstr "Không có dữ liệu được cung cấp" msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 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" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Không thể chuyển đổi {original} sang {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "Số lượng cung cấp không hợp lệ" @@ -104,13 +104,13 @@ msgstr "Nhập ngày" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "Ghi chú" @@ -123,75 +123,91 @@ msgstr "Giá trị '{name}' không xuất hiện ở định dạng mẫu" msgid "Provided value does not match required pattern: " msgstr "Giá trị được cung cấp không khớp với mẫu bắt buộc: " -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Chuỗi số sê-ri trống" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Trùng lặp sê-ri" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Khoảng nhóm {group} vượt cho phép số lượng ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Không tìm thấy số sê-ri" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Xóa thẻ HTML từ giá trị này" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Lỗi kết nối" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 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:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Xảy ra Exception" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 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:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Hình ảnh quá lớn" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 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:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Máy chủ trả về phản hồi trống" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 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ệ" @@ -199,7 +215,7 @@ msgstr "URL được cung cấp không phải là tệp hình ảnh hợp lệ" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "Email" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "Lựa chọn sai" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Tên" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "Mô tả" msgid "Description (optional)" msgstr "Mô tả (tùy chọn)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "Đường dẫn" @@ -320,51 +336,51 @@ msgstr "Lỗi đã được ghi lại bởi máy chủ." msgid "Image" msgstr "Hình ảnh" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "Phải là một số hợp lệ" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Tiền tệ" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "Chọn tiền tệ trong các tùy chọn đang có" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "Giá trị không hợp lệ" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "Hình ảnh từ xa" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "URL của tệp hình ảnh bên ngoài" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "Chức năng tải hình ảnh từ URL bên ngoài không được bật" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "" @@ -520,11 +536,11 @@ msgstr "Tiếng Trung (Giản thể)" msgid "Chinese (Traditional)" msgstr "Tiếng Trung (Phồn thể)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "" @@ -536,7 +552,7 @@ msgstr "Đơn vị vật lý không hợp lệ" msgid "Not a valid currency code" msgstr "Mã tiền tệ không hợp lệ" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "Trạng thái đặt hàng" @@ -545,21 +561,21 @@ msgstr "Trạng thái đặt hàng" msgid "Parent Build" msgstr "Phiên bản cha" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Nguyên liệu" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Danh mục" @@ -653,16 +669,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Bạn dựng phải được hủy bỏ trước khi có thể xóa được" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "Vật tư tiêu hao" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "Tuỳ chọn" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Lắp ráp" @@ -671,32 +687,32 @@ msgstr "Lắp ráp" msgid "Tracked" msgstr "Đã theo dõi" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "Có thể kiểm tra" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "Đã cấp phát" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "Đã dùng" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Có sẵn" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Bật đơn hàng" @@ -704,26 +720,26 @@ msgstr "Bật đơn hàng" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Tạo đơn hàng" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Địa điểm" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "" @@ -767,8 +783,8 @@ msgstr "" msgid "Build Order Reference" msgstr "Tham chiếu đơn đặt bản dựng" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "Tham chiếu đơn đặt bản dựng" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "Địa điểm nguồn" @@ -845,16 +861,16 @@ msgstr "Trnạg thái bản dựng" msgid "Build status code" msgstr "Mã trạng thái bản dựng" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Mã lô hàng" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "Mã lô cho đầu ra bản dựng này" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "Ngày tạo" @@ -875,7 +891,7 @@ msgstr "Ngày hoàn thành mục tiêu" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Ngày mục tiêu để hoàn thành bản dựng. Bản dựng sẽ bị quá hạn sau ngày này." -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "Ngày hoàn thành" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "Độ quan trọng của đơn đặt bản dựng" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Mã dự án" @@ -948,7 +964,7 @@ msgstr "Đơn đặt bản dựng {build} đã được hoàn thành" msgid "A build order has been completed" msgstr "Một đơn đặt bản dựng đã được hoàn thành" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "Số sê-ri phải được cung cấp cho hàng hoá có thể theo dõi" @@ -964,23 +980,23 @@ msgstr "Đầu ra bản dựng đã được hoàn thiện" msgid "Build output does not match Build Order" msgstr "Đầu ra bản dựng không phù hợp với đơn đặt bản dựng" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Số lượng phải lớn hơn 0" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "Số lượng không thể lớn hơn số lượng đầu ra" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Tạo đầu ra {serial} chưa vượt qua tất cả các bài kiểm tra" @@ -1001,10 +1017,10 @@ msgstr "Tạo mục đơn hàng" msgid "Build object" msgstr "Dựng đối tượng" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "Dựng đối tượng" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "Số lượng phải là 1 cho kho sê ri" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Số lượng được phân bổ ({q}) không thể vượt quá số lượng có trong kho ({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "Kho hàng đã bị phân bổ quá đà" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Kho hàng" @@ -1083,378 +1099,378 @@ msgstr "Kho hàng đích" msgid "Build Level" msgstr "Tạo cấp" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "Tên sản phẩm" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "Đầu ra bản dựng" -#: build/serializers.py:219 +#: build/serializers.py:226 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:223 +#: build/serializers.py:230 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:227 +#: build/serializers.py:234 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:241 +#: build/serializers.py:248 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:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "Điền số lượng cho đầu ra bản dựng" -#: build/serializers.py:331 +#: build/serializers.py:338 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:337 +#: build/serializers.py:344 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:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Số sê-ri" -#: build/serializers.py:355 +#: build/serializers.py:362 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:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "Vị trí tồn kho cho sản phẩm" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "Số sêri tự cấp" -#: build/serializers.py:378 +#: build/serializers.py:385 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:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Số sêri sau đây đã tồn tại hoặc không hợp lệ" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 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:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "Vị trí kho cho đầu ra phế phẩm" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "Hủy phân bổ" -#: build/serializers.py:493 +#: build/serializers.py:500 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:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "Lý do loại bỏ đầu ra bản dựng" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "Vị trí cho đầu ra bản dựng hoàn thiện" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "Chấp nhận phân kho dang dở" -#: build/serializers.py:565 +#: build/serializers.py:572 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:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "Xử lý phân bổ kho hàng" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "Tiêu thụ bất kỳ hàng tồn kho nào đã được phân bổ cho dự án này." -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "Xóa toàn bộ đầu ra chưa hoàn thành" -#: build/serializers.py:698 +#: build/serializers.py:705 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:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "Chưa được cấp phép" -#: build/serializers.py:726 +#: build/serializers.py:733 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:727 +#: build/serializers.py:734 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:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "Kho quá tải" -#: build/serializers.py:757 +#: build/serializers.py:764 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:768 +#: build/serializers.py:775 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:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "Chấp nhận chưa phân bổ được" -#: build/serializers.py:775 +#: build/serializers.py:782 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:786 +#: build/serializers.py:793 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:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Chấp nhận không hoàn thành" -#: build/serializers.py:793 +#: build/serializers.py:800 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:804 +#: build/serializers.py:811 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:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "Tạo đơn hàng có các đơn hàng đang mở" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "Tạo đơn hàng phải ở trạng thái sản xuất." -#: build/serializers.py:822 +#: build/serializers.py:829 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:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "Lộ giới" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "Đầu ra bản dựng" -#: build/serializers.py:877 +#: build/serializers.py:884 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:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "Mục chi tiết bản dựng" -#: build/serializers.py:926 +#: build/serializers.py:933 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:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Hàng hóa phải trong kho" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Số lượng có sẵn ({q}) đã bị vượt quá" -#: build/serializers.py:991 +#: build/serializers.py:998 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:999 +#: build/serializers.py:1006 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:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Hàng hóa phân bổ phải được cung cấp" -#: build/serializers.py:1087 +#: build/serializers.py:1094 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:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "Ngoại trừ vị trí" -#: build/serializers.py:1097 +#: build/serializers.py:1104 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:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "Kho trao đổi" -#: build/serializers.py:1103 +#: build/serializers.py:1110 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:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "Kho thay thế" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "Cho phép phân kho sản phẩm thay thế" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "Mục tùy chọn" -#: build/serializers.py:1115 +#: build/serializers.py:1122 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:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "BOM liên quan" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "ID hàng hoá BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "Tên hàng hoá BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "Sản phẩm nhà cung cấp" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Số lượng đã phân bổ" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "Tạo liên quan" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "Tên danh mục hàng hoá" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Có thể theo dõi" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "Được kế thừa" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "Cho phép biến thể" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Mục BOM" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "Đang sản xuất" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "Kho ngoài" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Số hàng tồn" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "Kho hàng thay thế" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "Hàng tồn kho có sẵn" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "" @@ -1478,7 +1494,7 @@ msgstr "Chờ" msgid "Cancelled" msgstr "Đã hủy" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "Đơn đặt bản dựng quá hạn" msgid "Build order {bo} is now overdue" msgstr "Đặt hàng bản dựng {bo} đang quá hạn" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "Đường dẫn" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "File" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "Không có quyền xoá file đính kèm" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Không có quyền xoá file đính kèm" @@ -1534,11 +1550,11 @@ msgstr "Mã tiền tệ không đúng" msgid "No plugin" msgstr "Không phần mở rộng" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Nhãn mã dự án" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "Đã cập nhật" @@ -1600,7 +1616,7 @@ msgstr "Chuỗi khóa phải duy nhất" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "Người dùng" msgid "Price break quantity" msgstr "Số lượng giá phá vỡ" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "Giá" @@ -1633,10 +1649,10 @@ msgstr "Đầu mối tại điểm webhook được nhận" msgid "Name for this webhook" msgstr "Tên của webhook này" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Hoạt động" @@ -1660,11 +1676,11 @@ msgstr "Bí mật" msgid "Shared secret for HMAC" msgstr "Mã bí mật dùng chung cho HMAC" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "Mã Tin nhắn" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "Định danh duy nhất cho tin nhắn này" @@ -1714,7 +1730,7 @@ msgstr "Tiêu đề" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "Tác giả" msgid "Summary" msgstr "Tóm tắt" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "Đọc" @@ -1797,7 +1813,7 @@ msgstr "Tập tin bị thiếu" msgid "Missing external link" msgstr "Thiếu liên kết bên ngoài" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "" @@ -1833,7 +1849,7 @@ msgstr "" msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" @@ -1861,7 +1877,7 @@ msgstr "" msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Giá trị" @@ -1874,7 +1890,7 @@ msgstr "" msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "" @@ -1930,7 +1946,7 @@ msgstr "" msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "" @@ -1982,7 +1998,7 @@ msgstr "" msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "Đã tạo" @@ -1998,334 +2014,334 @@ msgstr "Cập nhật lần cuối" msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "Mẫu tham số" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "Tham số hộp kiểm tra không thể có đơn vị" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "Tham số hộp kiểm tra không thể có lựa chọn" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "Lựa chọn phải duy nhất" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "Tên tham số mẫu phải là duy nhất" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "Tên tham số" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "Đơn vị" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "Đơn vị vật lý cho tham số này" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "Mô tả tham số" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "Ô lựa chọn" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "Tham số này có phải là hộp kiểm tra?" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "Lựa chọn" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "Lựa chọn hợp lệ từ tham số này (ngăn cách bằng dấu phẩy)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "Đã bật" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "Lựa chọn sai cho giá trị tham số" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "Mẫu" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Dữ liệu" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "Giá trị tham số" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "Ghi chú" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Trường ghi chú tùy chọn" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "Ngữ cảnh" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "Kết quả" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Khóa" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "" @@ -2375,1243 +2391,1259 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "Đang chạy" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "Công việc chờ xử lý" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "Tác vụ theo lịch" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "Tác vụ thất bại" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "ID tác vụ" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "ID tác vụ duy nhất" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "Khoá" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "Thời gian khóa" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "Tên công việc" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "Chức năng" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "Tên chức năng" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "Đối số" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "Đối số công việc" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "Đối số từ khóa" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "Đối số từ khóa công việc" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "Tên tập tin" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Không có nhóm" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "URL trang web đã bị khóa bởi cấu hình" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Cần khởi động lại" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Một thiết lập đã bị thay đổi yêu cầu khởi động lại máy chủ" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Chuyển dữ liệu chờ xử lý" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Số đợt nâng cấp cơ sở dữ liệu chờ xử lý" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Tên thực thể máy chủ" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Mô tả chuỗi cho thực thể máy chủ" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Sử dụng tên thực thể" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Sử dụng tên thực thể trên thanh tiêu đề" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Cấm hiển thị `giới thiệu`" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Chỉ hiển thị cửa sổ `giới thiệu` với siêu người dùng" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Tên công ty" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "Tên công ty nội bộ" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "URL cơ sở" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "URL cơ sở cho thực thể máy chủ" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "Tiền tệ mặc định" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "Chọn tiền tệ chính khi tính giá" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "Tần suất cập nhật tiền tệ" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Mức độ thường xuyên để cập nhật tỉ giá hối đoái (điền 0 để tắt)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "ngày" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "Phần mở rộng cập nhật tiền tệ" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "Phần mở rộng cập nhật tiền tệ được sử dụng" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "Tải về từ URL" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "Cho phép tải ảnh và tệp tin từ xa theo URL bên ngoài" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "Giới hạn kích thước tải xuống" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "Kích thước tải xuống tối đa với hình ảnh từ xa" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "User-agent được dùng để tải xuống theo URL" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Cho phép ghi đè user-agent được dùng để tải về hình ảnh và tệp tin từ xa theo URL bên ngoài (để trống nghĩa là dùng mặc định)" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "Thời gian kiểm tra bản cập nhật" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "Mức độ thường xuyên để kiểm tra bản cập nhật (điền 0 để tắt)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "Sao lưu tự động" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "Bật tính năng sao lưu tự động cơ sở dữ liệu và tệp tin đa phương tiện" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "Khoảng thời gian sao lưu tự động" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "Xác định số ngày giữa các kỳ sao lưu tự động" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "Khoảng thời gian xóa tác vụ" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "Kết quả tác vụ chạy ngầm sẽ bị xóa sau số ngày được chỉ định" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "Khoảng thời gian xóa nhật ký lỗi" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "Nhật ký lỗi sẽ bị xóa sau số ngày được chỉ định" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "Khoảng thời gian xóa thông báo" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "Thông báo sẽ bị xóa sau số ngày được chỉ định" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "Hỗ trợ mã vạch" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "Bật hỗ trợ máy quét mã vạch trong giao diện web" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "Độ trễ quét mã vạch" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "Thời gian trễ xử lý đầu đọc mã vạch" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "Hỗ trợ mã vạch qua webcam" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "Cho phép quét mã vạch qua webcam bên trong trình duyệt" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "Phiên bản Sản phẩm" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "Bật trường phiên bản cho sản phẩm" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "Mẫu IPN" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "Mẫu dùng nhanh phổ biến dành cho tìm IPN sản phẩm" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "Cho phép trùng IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "Cho phép nhiều sản phẩm dùng IPN giống nhau" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "Cho phép sửa IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "Cho phép đổi giá trị IPN khi sửa một sản phẩm" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "Sao chép dữ liệu BOM của sản phẩm" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "Sao chép dữ liệu BOM mặc định khi nhân bản 1 sản phẩm" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "Sao chép dữ liệu tham số sản phẩm" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "Sao chép dữ liệu tham số mặc định khi nhân bản 1 sản phẩm" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "Chép thông tin kiểm thử sản phẩm" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "Sao chép dữ liệu kiểm thử mặc định khi nhân bản 1 sản phẩm" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "Sao chéo mẫu tham số danh mục" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "Sao chéo mẫu tham số danh mục khi tạo 1 sản phẩm" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "Sản phẩm là mẫu bởi mặc định" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "Sản phẩm có thể lắp giáp từ thành phần khác theo mặc định" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "Thành phần" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "Sản phẩm có thể được sử dụng mặc định như thành phần phụ" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "Có thể mua" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "Sản phẩm mặc định có thể mua được" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Có thể bán" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "Sản phẩm mặc định có thể bán được" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "Sản phẩm mặc định có thể theo dõi được" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "Ảo" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "Sản phẩm mặc định là số hóa" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "Hiển thị sản phẩm liên quan" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "Hiện sản phẩm liên quan cho 1 sản phẩm" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "Số liệu tồn kho ban đầu" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "Cho phép tạo tồn kho ban đầu khi thêm 1 sản phẩm mới" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "Dữ liệu nhà cung cấp ban đầu" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Cho phép tạo dữ liệu nhà cung cấp ban đầu khi thêm 1 sản phẩm mới" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "Định dạng tên sản phẩm hiển thị" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "Định dạng để hiển thị tên sản phẩm" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "Biểu tượng mặc định của danh mục sản phẩm" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "Biểu tượng mặc định của danh mục sản phẩm (để trống nghĩa là không có biểu tượng)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "Vị trí phần thập phân giá bán tối thiểu" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Số vị trí thập phân tối thiểu cần hiển thị khi tạo dữ liệu giá" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "Vị trí phần thập phân giá bán tối đa" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Số vị trí thập phân tối đa cần hiển thị khi tạo dữ liệu giá" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "Sử dụng giá bán nhà cung cấp" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Bao gồm giá phá vỡ cả nhà cung cấp trong tính toán giá tổng thể" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "Ghi đè lịch sử mua hàng" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Giá đơn hàng đặt mua trước đó ghi đè giá phá vỡ của nhà cung cấp" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "Sử dụng giá hàng hóa trong kho" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Dùng giá bán từ dữ liệu kho nhập vào thủ công đối với bộ tính toán giá bán" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "Tuổi giá kho hàng" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Loại trừ hàng hóa trong kho cũ hơn số ngày ngày từ bảng tính giá bán" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "Sử dụng giá biến thể" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "Bao gồm giá biến thể trong bộ tính toán giá tổng thể" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "Chỉ các biến thể hoạt động" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "Chỉ sử dụng sản phẩm biến thể hoạt động để tính toán giá bán biến thể" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "Tần suất tạo lại giá" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "Số ngày trước khi giá sản phẩm được tự động cập nhật" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "Giá nội bộ" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "Bật giá nội bộ cho sản phẩm" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "Ghi đè giá nội bộ" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "Nếu khả dụng, giá nội bộ ghi đè tính toán khoảng giá" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "Bật in tem nhãn" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "Bật chức năng in tem nhãn từ giao diện web" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "DPI hỉnh ảnh tem nhãn" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Độ phân giải DPI khi tạo tệp hình ảnh để cung cấp cho plugin in ấn tem nhãn" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "Bật báo cáo" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "Cho phép tạo báo cáo" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "Chế độ gỡ lỗi" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "Tạo báo cáo trong chế độ gỡ lỗi (đầu ra HTML)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "Khổ giấy" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "Kích thước trang mặc định cho báo cáo PDF" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "Bắt buộc đơn vị tham số" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "Nếu đơn vị được cung cấp, giá trị tham số phải phù hợp với các đơn vị xác định" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "Sê ri toàn cục duy nhất" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "Số sê ri cho hàng trong kho phải là duy nhất trong toàn hệ thống" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "Xóa kho đã hết hàng" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "Mẫu sinh mã theo lô" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "Mẫu tạo mã theo lô mặc định cho hàng trong kho" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "Quá hạn trong kho" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "Bật chức năng quá hạn tồn kho" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "Bán kho quá hạn" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "Cho phép bán hàng kho quá hạn" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "Thời gian hàng cũ trong kho" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "Số ngày hàng trong kho được xác định là cũ trước khi quá hạn" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "Dựng kho quá hạn" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "Cho phép xây dựng với kho hàng quá hạn" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "Kiểm soát sở hữu kho" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "Bật chức năng kiểm soát sở hữu kho với địa điểm và hàng trong kho" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "Biểu tượng địa điểm kho mặc định" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "Biểu tượng địa điểm kho hàng mặc định (trống nghĩa là không có biểu tượng)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "Hiển thị hàng hóa đã lắp đặt" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "Hiển thị hàng trong kho đã được lắp đặt trên bảng kho" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "Mã tham chiếu đơn đặt bản dựng" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "Mẫu bắt buộc cho để trường tham chiếu đơn đặt bản dựng" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "Bật đơn hàng trả lại" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "Bật chức năng đơn hàng trả lại trong giao diện người dùng" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "Mẫu tham chiếu đơn hàng trả lại" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "Sửa đơn hàng trả lại đã hoàn thành" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "Cho phép sửa đơn hàng trả lại sau khi đã hoàn thành rồi" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "Mẫu tham chiếu đơn đặt hàng" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "Mẫu bắt buộc để tạo trường tham chiếu đơn đặt hàng" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "Vận chuyển mặc định đơn đặt hàng" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "Cho phép tạo vận chuyển mặc định với đơn đặt hàng" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "Sửa đơn đặt hàng đã hoàn thành" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Cho phép sửa đơn đặt hàng sau khi đã vận chuyển hoặc hoàn thành" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "Mẫu tham chiếu đơn đặt mua" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "Mẫu bắt buộc cho để trường tham chiếu đơn đặt mua" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "Sửa đơn đặt mua đã hoàn thành" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Cho phép sửa đơn đặt mua sau khi đã vận chuyển hoặc hoàn thành" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "Tự động hoàn thành đơn đặt mua" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "Bật quên mật khẩu" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "Bật chức năng quên mật khẩu trong trang đăng nhập" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "Bật đăng ký" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "Cho phép người dùng tự đăng ký tại trang đăng nhập" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "Bật SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "Cho phép SSO tại trang đăng nhập" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "Bật đăng ký SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Cho phép người dùng tự đăng ký SSO tại trang đăng nhập" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "Yêu cầu email" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "Yêu cầu người dùng cung cấp email để đăng ký" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "Người dùng tự động điền SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "Tự động điền thông tin chi tiết từ dữ liệu tài khoản SSO" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "Thư 2 lần" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "Khi đăng ký sẽ hỏi người dùng hai lần thư điện tử của họ" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "Mật khẩu 2 lần" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "Khi đăng ký sẽ hỏi người dùng hai lần mật khẩu của họ" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "Các tên miền được phép" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Cấm đăng ký với 1 số tên miền cụ thể (dấu phẩy ngăn cách, bắt đầu với dấu @)" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "Nhóm khi đăng ký" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "Bắt buộc MFA" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "Người dùng phải sử dụng bảo mật đa nhân tố." -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "Kiểm tra phần mở rộng khi khởi động" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Kiểm tra toàn bộ phần mở rộng đã được cài đặt khi khởi dộng - bật trong môi trường ảo hóa" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "Kiểm tra cập nhật plugin" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "Bật tích hợp URL" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "Bật phần mở rộng để thêm định tuyến URL" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "Bật tích hợp điều hướng" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "Bật phần mở rộng để tích hợp thanh định hướng" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "Bật tích hợp ứng dụng" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "Bật phần mở rộng để thêm ứng dụng" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "Cho phép tích hợp lập lịch" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "Bật phẩn mở rộng để chạy các tác vụ theo lịch" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "Bật tích hợp nguồn cấp sự kiện" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "Bật phần mở rộng để trả lời sự kiện bên trong" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "Ngoại trừ vị trí bên ngoài" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "Giai đoạn kiểm kê tự động" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "Hiển thị tên đầy đủ của người dùng" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "Hiển thị tên đầy đủ thay vì tên đăng nhập" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "Nhà sản xuất" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "Doanh nghiêp" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4071,7 +4103,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "Địa chỉ" @@ -4163,7 +4195,7 @@ msgstr "Ghi chú nội bộ sử dụng cho chuyển phát nhanh" msgid "Link to address information (external)" msgstr "Liên kết thông tin địa chỉ (bên ngoài)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Sản phẩm nhà sản xuất" @@ -4181,12 +4213,12 @@ msgstr "Chọn sản phẩm" msgid "Select manufacturer" msgstr "Chọn nhà sản xuất" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "Mã số nhà sản xuất" @@ -4210,8 +4242,8 @@ msgstr "Đơn vị đóng gói phải lớn hơn không" msgid "Linked manufacturer part must reference the same base part" msgstr "Sản phẩm nhà sản xuất đã liên kết phải tham chiếu với sản phẩm cơ bản tương tự" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "Nhà cung cấp" msgid "Select supplier" msgstr "Chọn nhà cung cấp" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "Đơn vị quản lý kho nhà cung cấp" @@ -4258,8 +4290,8 @@ msgstr "chi phí cơ sở" msgid "Minimum charge (e.g. stocking fee)" msgstr "Thu phí tối thiểu (vd: phí kho bãi)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "Đóng gói" @@ -4307,14 +4339,18 @@ msgstr "Tiền tệ mặc định được sử dụng cho nhà cung cấp này" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "Còn hàng" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" @@ -4419,67 +4455,67 @@ msgstr "" msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "Hợp lệ" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Không rõ" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "Tham chiếu đơn đặt" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" @@ -4767,11 +4803,11 @@ msgstr "" msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" @@ -4779,17 +4815,17 @@ msgstr "" msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "Đặt hàng" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Sản phẩm nội bộ" @@ -4797,27 +4833,27 @@ msgstr "Sản phẩm nội bộ" msgid "Order Pending" msgstr "" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "Đã hoàn thành" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Đơn hàng" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "Đơn hàng" msgid "Sales Order" msgstr "Đơn đặt hàng" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Mô tả đơn đặt (tùy chọn)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "Mã dự án đã chọn cho đơn đặt hàng này" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "Liên kết đến trang bên ngoài" @@ -4886,7 +4922,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Ngày mục tiêu" @@ -4919,413 +4955,421 @@ msgstr "Đầu mối liên hệ của đơn đặt này" msgid "Company address for this order" msgstr "Địa chỉ công ty cho đơn đặt này" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "Mã đặt hàng" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Trạng thái" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "Trạng thái đơn đặt mua" -#: order/models.py:654 +#: order/models.py:667 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:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "Tham chiếu nhà cung cấp" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "Mã tham chiếu đơn đặt nhà cung cấp" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "nhận bởi" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "Ngày đặt hàng đã được hoàn thiện" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "Đích đến" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "" -#: order/models.py:738 +#: order/models.py:751 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:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "Mục dòng không phù hợp với đơn đặt mua" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "Số lượng phải là số dương" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Khách hàng" -#: order/models.py:1350 +#: order/models.py:1363 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:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "Tham chiếu khách hàng " -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "Mã tham chiếu đơn đặt của khách hàng" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "Ngày giao hàng" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "vận chuyển bằng" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1446 +#: order/models.py:1459 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:1450 +#: order/models.py:1463 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:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1464 +#: order/models.py:1477 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:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "Số lượng mặt hàng" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1822 msgid "Line item reference" msgstr "Tham chiếu khoản riêng" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "Ghi chú khoản riêng" -#: order/models.py:1822 +#: order/models.py:1844 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:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "Mô tả khoản riêng (tùy chọn)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "Ngữ cảnh bổ sung" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "Đơn giá" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1917 +#: order/models.py:1939 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:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "Sản phẩm nhà cung cấp" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "Đã nhận" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "Số mục đã nhận" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Giá mua" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "Giá đơn vị mua" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2121 +#: order/models.py:2143 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:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "Giá bán" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "Giá bán đơn vị" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "Đã chuyển" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "Số lượng đã vận chuyển" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "Ngày vận chuyển" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "Ngày giao hàng" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "Ngày giao hàng của vận chuyển" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "Kiểm tra bởi" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "Người dùng đã kiểm tra vận chuyển này" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Vận chuyển" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "Mã vận chuyển" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "Số theo dõi" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "Thông tin theo dõi vận chuyển" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "Mã hóa đơn" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "Số tham chiếu liên kết với hóa đơn" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "Vận đơn đã được gửi đi" -#: order/models.py:2410 +#: order/models.py:2439 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:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "Hàng trong kho chưa được giao" -#: order/models.py:2548 +#: order/models.py:2577 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:2551 +#: order/models.py:2580 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:2554 +#: order/models.py:2583 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:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "Số lượng phân bổ phải lớn hơn 0" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 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:2576 +#: order/models.py:2605 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:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Vận đơn không phù hợp với đơn bán hàng" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "Dòng" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "Tham chiếu vận đơn của đơn hàng bán" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "Hàng hóa" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "Chọn hàng trong kho để phân bổ" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "Nhập số lượng phân kho" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "Tham chiếu đơn hàng trả lại" -#: order/models.py:2748 +#: order/models.py:2777 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:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "Trạng thái đơn hàng trả lại" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3036 +#: order/models.py:3065 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:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "Ngày nhận được" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "Kết quả" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "Kết quả cho hàng hóa dòng này" -#: order/models.py:3072 +#: order/models.py:3101 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:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "" @@ -5353,7 +5397,7 @@ msgstr "" msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "Sao chép thông số" @@ -5372,216 +5416,216 @@ msgstr "Mục dòng" msgid "Completed Lines" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Tên nhà cung cấp" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Đơn đặt không thể bị hủy" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 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:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 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:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Đơn đặt là không được mở" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Tiền tệ giá mua" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "Mã sản phẩm nội bộ" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Sản phẩm nhà cung cấp phải được chỉ định" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Đơn đặt mua phải được chỉ định" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Nhà cung cấp phải phù hợp với đơn đặt mua" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Đơn đặt mua phải phù hợp với nhà cung cấp" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Mục dòng" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Chọn vị trí đích cho hàng hóa đã nhận" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Nhập mã lô cho hàng trong kho đang đến" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Ngày hết hạn" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Nhập số sê ri cho hàng trong kho đang đến" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "Mã vạch" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Mã vạch đã quét" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Mã vạch đã được dùng" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Dòng hàng hóa phải được cung cấp" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Vị trí đích phải được chỉ ra" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Giá trị mã vạch đã cung cấp phải duy nhất" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Vận đơn đã hoàn thành" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Tiền tệ giá bán" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Chưa cung cấp thông tin vận chuyển" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 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:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Số lượng phải là số dương" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Nhập số sê ri để phân bổ" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Vận đơn đã được chuyển đi" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 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:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Không tìm thấy số sê ri sau đây" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Dòng riêng biệt đơn hàng trả lại" -#: order/serializers.py:2003 +#: order/serializers.py:2116 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:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Line item đã nhận được" -#: order/serializers.py:2043 +#: order/serializers.py:2156 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:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Tiền tệ giá đồng hạng" @@ -5797,7 +5841,7 @@ msgstr "Từ khóa mặc định cho sản phẩm trong danh mục này" msgid "Icon" msgstr "Biểu tượng" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Biểu tượng (tùy chọn)" @@ -5818,7 +5862,7 @@ msgstr "Giá trị mặc định" msgid "Default Parameter Value" msgstr "Giá trị tham số mặc định" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "Nguyên liệu" @@ -5933,7 +5977,7 @@ msgstr "Từ khóa sản phẩm để cải thiện sự hiện diện trong k msgid "Part category" msgstr "Danh mục sản phẩm" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" @@ -5942,7 +5986,7 @@ msgstr "" msgid "Part revision or version number" msgstr "Số phiên bản hoặc bản duyệt lại sản phẩm" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "Phiên bản" @@ -5966,7 +6010,7 @@ msgstr "Hết hạn mặc định" msgid "Expiry time (in days) for stock items of this part" msgstr "Thời gian hết hạn (theo ngày) để nhập kho hàng hóa cho sản phẩm này" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "Kho tối thiểu" @@ -6447,355 +6491,355 @@ msgstr "Không thể tạo mối quan hệ giữa một sản phẩm và chính msgid "Duplicate relationship already exists" msgstr "Đã tồn tại mối quan hệ trùng lặp" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "Phụ mục" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 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:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "Sản phẩm gốc" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "Chọn sản phẩm gốc để nhân bản" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "Sao chép ảnh" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "Sao chép hình ảnh từ sản phẩm gốc" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "Sao chép BOM" -#: part/serializers.py:407 +#: part/serializers.py:410 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:414 +#: part/serializers.py:417 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:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "Sao chép ghi chú" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "Sao chép ghi chú từ sản phẩm gốc" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "Số liệu tồn kho ban đầu" -#: part/serializers.py:448 +#: part/serializers.py:451 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:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "Vị trí kho ban đầu" -#: part/serializers.py:456 +#: part/serializers.py:459 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:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "Chọn nhà cung cấp (hoặc để trống để bỏ qua)" -#: part/serializers.py:489 +#: part/serializers.py:492 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:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "Mã số nhà sản xuất" -#: part/serializers.py:506 +#: part/serializers.py:509 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:515 +#: part/serializers.py:518 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:526 +#: part/serializers.py:529 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:533 +#: part/serializers.py:536 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:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "Tên danh mục" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "Đang dựng" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Hàng trong kho" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Tổng số lượng" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "Nhân bản sản phẩm" -#: part/serializers.py:942 +#: part/serializers.py:969 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 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "Số liệu kho ban đầu" -#: part/serializers.py:949 +#: part/serializers.py:976 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:982 msgid "Supplier Information" msgstr "Thông tin nhà cung cấp" -#: part/serializers.py:956 +#: part/serializers.py:983 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:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "Sao chép thông số nhóm hàng" -#: part/serializers.py:966 +#: part/serializers.py:993 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:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "Ảnh hiện có" -#: part/serializers.py:972 +#: part/serializers.py:999 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:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "Tệp hình ảnh không tồn tại" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "Xác minh toàn bộ hóa đơn vật liệu" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "Có thể dựng" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "Giá thấp nhất" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "Giá trị tính toán ghi đè cho giá tối thiểu" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "Tiền tế giá tối thiểu" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "Giá cao nhất" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "Giá trị tính toán ghi đè cho giá tối đa" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "Tiền tế giá tối đa" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "Cập nhật" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "Cập nhật giá cho sản phẩm này" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, 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:1528 +#: part/serializers.py:1560 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:1531 +#: part/serializers.py:1563 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:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "" -#: part/serializers.py:1927 +#: part/serializers.py:1991 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:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "Xóa dữ liệu đã tồn tại" -#: part/serializers.py:1936 +#: part/serializers.py:2000 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:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "Bao gồm thừa hưởng" -#: part/serializers.py:1942 +#: part/serializers.py:2006 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:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "Bỏ qua dòng không hợp lệ" -#: part/serializers.py:1948 +#: part/serializers.py:2012 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:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "Sao chép sản phẩm thay thế" -#: part/serializers.py:1954 +#: part/serializers.py:2018 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" @@ -7516,7 +7560,7 @@ msgstr "Viền" msgid "Print a border around each label" msgstr "In một viền xung quanh từng nhãn" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "Ngang" @@ -7596,64 +7640,77 @@ msgstr "Cung cấp khả năng quét mã vạch TME" msgid "The Supplier which acts as 'TME'" msgstr "Nhà cung cấp hoạt động như 'TME'" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Cài đặt phần mở rộng thành công" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Cài đặt phần bổ sung đến {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7900,55 +7957,55 @@ msgstr "Cài đặt chưa được xác nhận" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Tải lại đầy đủ" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Buộc tải lại" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Kích hoạt phần bổ sung" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Kích hoạt phần bổ sung này" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "" @@ -7964,7 +8021,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "" @@ -7988,152 +8045,156 @@ msgstr "Thư" msgid "Template file with this name already exists" msgstr "" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "Tên mẫu" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "Mẫu tên tệp" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "Bộ lọc" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "Khổ giấy cho báo cáo PDF" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "Tạo báo cáo theo hướng ngang" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "Chiều rộng [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "Chiều rộng nhãn, tính theo mm" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "Chiều cao [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "Chiều cao nhãn, tính theo mm" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "Mẫu trích" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "Tệp báo cáo mẫu" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "Mô tả tệp báo cáo mẫu" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "Tài sản" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "Tệp báo cáo tài sản" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "Mô tả tệp báo cáo tài sản" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "" @@ -8231,7 +8292,7 @@ msgstr "Báo cáo kiểm thử mặt hàng" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "Mục đã cài đặt" @@ -8288,7 +8349,7 @@ msgstr "" 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:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "thẻ company_image yêu cầu một thực thể doanh nghiệp" @@ -8304,7 +8365,7 @@ msgstr "" msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "" @@ -8388,7 +8449,7 @@ msgstr "Ngày hết hạn trước đó" msgid "Expiry date after" msgstr "Ngày hết hạn sau đó" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "Ế" @@ -8522,7 +8583,7 @@ msgstr "" msgid "Stock items cannot be located into structural stock locations!" msgstr "Không thể đặt hàng trong kho vào trong địa điểm kho có cấu trúc!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Không thể tạo hàng hóa trong kho cho sản phẩm ảo" @@ -8567,7 +8628,7 @@ msgstr "Chọn sản phẩm nhà cung cấp khớp với hàng hóa trong kho n msgid "Where is this stock item located?" msgstr "Hàng trong kho này được đặt ở đâu?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Đóng gói hàng hóa này được lưu trữ lại" @@ -8583,7 +8644,7 @@ msgstr "Mục này đã được cài đặt trong mục khác?" msgid "Serial number for this item" msgstr "Số sê ri cho mục này" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Mã lô cho hàng trong kho này" @@ -8696,7 +8757,7 @@ msgstr "Hàng trong kho hiện đang sản xuất" msgid "Serialized stock cannot be merged" msgstr "Không thể hợp nhất kho nối tiếp" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Mặt hàng trùng lặp" @@ -8820,7 +8881,7 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "" @@ -8844,222 +8905,222 @@ msgstr "Mục cha" msgid "Parent stock item" msgstr "" -#: stock/serializers.py:451 +#: stock/serializers.py:454 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:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "Điền số sêri cho hàng hóa mới" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "Số hiệu hàng hoá nhà cung cấp" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "Đã hết hạn" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "Mục con" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:654 +#: stock/serializers.py:668 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:692 +#: stock/serializers.py:706 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:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, 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:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "Vị trí kho đích" -#: stock/serializers.py:746 +#: stock/serializers.py:760 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:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "Số sêri đã tồn tại" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "Chọn mặt hàng để lắp đặt" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "Số lượng để cài đặt" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "Nhập số lượng hàng hóa để cài đặt" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "Thêm ghi chú giao dịch (tùy chọn)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 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:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "Mặt hàng không khả dụng" -#: stock/serializers.py:856 +#: stock/serializers.py:870 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:869 +#: stock/serializers.py:883 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:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "Vị trí đích cho hàng hóa bị gỡ bỏ" -#: stock/serializers.py:942 +#: stock/serializers.py:956 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:955 +#: stock/serializers.py:969 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:972 +#: stock/serializers.py:986 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:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "Mã trạng thái mặt hàng" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "Chọn mặt hàng để đổi trạng thái" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "Không có mặt hàng nào được chọn" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "Kho phụ" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "Sản phẩm phải có thể bán được" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 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:1341 +#: stock/serializers.py:1374 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:1365 +#: stock/serializers.py:1398 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:1371 +#: stock/serializers.py:1404 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:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "Ghi chú phân bổ kho" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 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:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "Ghi chú gộp kho" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "Cho phép nhiều nhà cung không khớp" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 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:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "Cho phép trạng thái không khớp" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 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:1490 +#: stock/serializers.py:1523 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:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "Giá trị khóa chính mặt hàng" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "Ghi chú giao dịch kho" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "" @@ -9541,83 +9602,99 @@ msgstr "Đơn hàng bán" msgid "Return Orders" msgstr "Đơn hàng trả lại" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "Tên người dùng" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "Tên" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "Họ người dùng" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "Họ" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "Tên người dùng" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "Địa chỉ email của người dùng" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Nhân viên" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Người dùng có quyền nhân viên" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superuser" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Người dùng này là superuser" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Tài khoản người dùng đang hoạt động" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Tài khoản của bạn đã được tạo." -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Xin hãy sử dụng chức năng tạo lại mật khẩu để đăng nhập" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "Chào mừng đến với InvenTree" diff --git a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po index c66cf02c71..e6e6c13d9d 100644 --- a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -23,7 +23,7 @@ msgstr "未找到 API 端点" #: InvenTree/api.py:438 msgid "List of items must be provided for bulk operation" -msgstr "批量操作必须提供项目列表" +msgstr "批量操作必须提供物料清单" #: InvenTree/api.py:445 msgid "Items must be provided as a list" @@ -49,7 +49,7 @@ msgstr "未提供数据" msgid "This field must be unique." msgstr "此字段的值必须是唯一的。" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "用户没有权限查阅当前模型。" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "不能将 {original} 转换到 {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "提供的数量无效" @@ -104,13 +104,13 @@ msgstr "输入日期" msgid "Invalid decimal value" msgstr "无效的数值" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "备注" @@ -123,75 +123,91 @@ msgstr "值' {name}' 未出现在模式格式中" msgid "Provided value does not match required pattern: " msgstr "提供的值与所需模式不匹配:" -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "无法一次序列化超过 1000 个项目" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "序列号为空白" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "重复的序列号" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "无效群组: {group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "组范围 {group} 超出了允许的数量 ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "未找到序列号" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "唯一序列号 ({n}) 必须匹配数量 ({q})" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "从这个值中删除 HTML 标签" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "数据包含禁止的 markdown 内容" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "URL无效:无主机名" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "无效URL:无法解析的主机名" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "URL指向私有或保留IP地址" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "太多重定向" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "连接错误" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "服务器响应状态码无效" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "发生异常" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "服务器响应的内容长度值无效" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "图片尺寸过大" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "图片下载超出最大尺寸" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "远程服务器返回了空响应" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "提供的 URL 不是一个有效的图片文件" @@ -199,7 +215,7 @@ msgstr "提供的 URL 不是一个有效的图片文件" msgid "Log in to the app" msgstr "登录应用程序" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "电子邮件" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "无效选项" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "名称" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "描述" msgid "Description (optional)" msgstr "描述(选填)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "路径" @@ -320,51 +336,51 @@ msgstr "服务器记录了一个错误。" msgid "Image" msgstr "图像" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "必须是有效数字" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "货币" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "从可用选项中选择货币" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "此字段不能为空。" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "无效值" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "远程图片" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "远程图片文件的 URL" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "未启用从远程 URL下载图片" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "从远程URL下载图像失败" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "无效的内容类型格式" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "未找到内容类型" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "内容类型不匹配所需的 mixin 类" @@ -520,11 +536,11 @@ msgstr "中文 (简体)" msgid "Chinese (Traditional)" msgstr "中文 (繁体)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "有可用更新" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "InvenTree有可用更新" @@ -536,7 +552,7 @@ msgstr "无效的物理单位" msgid "Not a valid currency code" msgstr "无效的货币代码" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "订单状态" @@ -545,21 +561,21 @@ msgstr "订单状态" msgid "Parent Build" msgstr "父级生产订单" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "包含变体" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "包含变体" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "包含变体" msgid "Part" msgstr "零件" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "类别" @@ -653,16 +669,16 @@ msgstr "排除树" msgid "Build must be cancelled before it can be deleted" msgstr "生产订单必须取消后才能删除" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "耗材" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "可选项" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "装配件" @@ -671,32 +687,32 @@ msgstr "装配件" msgid "Tracked" msgstr "可追溯" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "需检测" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "未结算订单" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "已分配" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "已消耗" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "可用数量" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "已订购" @@ -704,26 +720,26 @@ msgstr "已订购" msgid "Build not found" msgstr "未找到版本" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "生产订单" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "库存位置" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "产出" @@ -767,8 +783,8 @@ msgstr "目标日期必须在开始日期之后" msgid "Build Order Reference" msgstr "生产订单编号" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "销售订单编号" msgid "Sales Order to which this build is allocated" msgstr "该生产订单关联的销售订单" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "源库位" @@ -845,16 +861,16 @@ msgstr "生产状态" msgid "Build status code" msgstr "生产状态代码" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "批号" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "本批产出的批次编号" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "建立日期" @@ -875,7 +891,7 @@ msgstr "计划完成日期" msgid "Target date for build completion. Build will be overdue after this date." msgstr "生产订单的计划完成时间,逾期后系统将标记为超期。" -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "完成日期" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "此生产订单的优先级" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "项目编号" @@ -948,7 +964,7 @@ msgstr "生产订单 {build} 已完成" msgid "A build order has been completed" msgstr "生产订单已完成" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "可追溯零件必须填写序列号" @@ -964,30 +980,30 @@ msgstr "产出已完成" msgid "Build output does not match Build Order" msgstr "产出与生产订单不匹配" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "数量必须大于零" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "数量不能大于产出数量" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "产出未通过所有必要测试" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "产出 {serial} 未通过所有必要测试" #: build/models.py:1203 msgid "Allocated stock items are still in production" -msgstr "" +msgstr "已分配的库存物料仍在生产中" #: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" @@ -1001,10 +1017,10 @@ msgstr "生产订单行项目" msgid "Build object" msgstr "生产对象" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "生产对象" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "序列化物料的数量必须为1" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "分配数量 ({q}) 不得超过可用库存数量 ({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "库存品项超额分配" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "库存项" @@ -1083,378 +1099,378 @@ msgstr "目标库存项" msgid "Build Level" msgstr "生产等级" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "零件名称" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "产出" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "生产产出与上级订单不匹配" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "产出零件与生产订单零件不匹配" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "此产出已经完成" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "此产出尚未完全分配" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "输入产出数量" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "可追踪的零件数量必须为整数" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "因为物料清单包含可追踪的零件,所以数量必须为整数" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "序列号" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "输入产出的序列号" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "生产产出的库存地点" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "自动分配序列号" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "自动为所需项目分配对应的序列号" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "以下序列号已存在或无效" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "必须提供产出清单" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "报废品库存地点" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "放弃分配" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "取消对报废产品的库存分配" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "废品产出的原因" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "完工产出存放库位" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "接受不完整的分配" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "如果库存尚未全部分配,则完成产出" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "消耗已分配库存" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "立即扣除已分配给该生产任务的库存" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "移除未完成的产出" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "删除所有未完成的产出" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "禁止操作" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "标记为当前生产订单消耗" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "完成此生产订单前取消分配" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "超额分配库存" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "如何处理分配给生产订单的超额库存" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "存在超额分配的库存项" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "接受未分配" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "接受库存项未被完全分配至生产订单" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "必需库存未完成全量分配" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "接受未完工" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "允许所需数量的产出未完成" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "生产需求数量未完成" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "生产订单有打开的子生产订单" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "生产订单必须处于生产状态" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "生产订单有未完成的产出" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "生产行" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "产出" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "生产产出必须指向相同的生产" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "生产行项目" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part 必须与生产订单零件相同" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "项目必须在库存中" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "可用量 ({q}) 超出限制" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "对于被追踪的零件的分配,必须指定生产产出" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "对于未被追踪的零件,无法指定生产产出" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "必须提供分配项目" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "零件来源的库存地点(留空则可来源于任何库存地点)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "排除位置" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "从该选定的库存地点排除库存项" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "可互换库存" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "在多个位置的库存项目可以互换使用" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "替代品库存" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "允许分配可替换的零件" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "可选项目" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "分配可选的物料清单给生产订单" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" -msgstr "" +msgstr "所有物料" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "未跟踪的物品" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "已跟踪的物品" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "物品类型" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "选择要自动分配的条目类型" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "物料清单参考" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "物料清单零件识别号码" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "物料清单零件名称" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "安裝到" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "生产" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "供应商零件" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "已分配数量" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "生产订单编号" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "零件类别名称" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "可追踪" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "已继承的" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "允许变体" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "物料清单项" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "生产中" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "生产计划" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "外部库存" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "可用库存" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "可用的替代品库存" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "可用的变体库存" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "消耗数量超过分配数量" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "库存消耗可选备注" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "生产物料项必须关联到正确的生产订单" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "重复的生产物料项分配" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "订单行项目必须关联到正确的生产订单" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "重复的订单行项目分配" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "必须提供至少一个物料项或行项目" @@ -1478,7 +1494,7 @@ msgstr "已暂停" msgid "Cancelled" msgstr "已取消" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "逾期的生产订单" msgid "Build order {bo} is now overdue" msgstr "生产订单 {bo} 现已逾期" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "是否链接" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "是否为文件" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "用户没有权限删除此附件" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "用户没有权限删除此附件" @@ -1534,11 +1550,11 @@ msgstr "未提供有效的货币代码" msgid "No plugin" msgstr "暂无插件" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "项目编号标签" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "已是最新" @@ -1600,7 +1616,7 @@ msgstr "键字符串必须是唯一的" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "使用者" msgid "Price break quantity" msgstr "批发价数量" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "价格" @@ -1633,10 +1649,10 @@ msgstr "接收此网络钩子的端点" msgid "Name for this webhook" msgstr "此网络钩子的名称" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "激活" @@ -1660,11 +1676,11 @@ msgstr "密钥" msgid "Shared secret for HMAC" msgstr "HMAC共享密钥" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "消息ID" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "此邮件的唯一标识符" @@ -1714,7 +1730,7 @@ msgstr "标题" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "作者" msgid "Summary" msgstr "摘要" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "阅读" @@ -1797,7 +1813,7 @@ msgstr "缺少文件" msgid "Missing external link" msgstr "缺少外部链接" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "模型类型" @@ -1833,7 +1849,7 @@ msgstr "文件大小" msgid "File size in bytes" msgstr "文件大小,以字节为单位" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "为附件指定的模型类型无效" @@ -1861,7 +1877,7 @@ msgstr "逻辑密钥" msgid "State logical key that is equal to this custom state in business logic" msgstr "等同于商业逻辑中自定义状态的状态逻辑键" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "值" @@ -1874,7 +1890,7 @@ msgstr "将保存至模型数据库的数值" msgid "Name of the state" msgstr "状态名" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "标签" @@ -1930,7 +1946,7 @@ msgstr "逻辑密钥必须在参考状态的逻辑键中" msgid "Name must be different from the names of the reference status" msgstr "名称必须不同于参考状态的名称" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "选择列表" @@ -1982,7 +1998,7 @@ msgstr "缺省项" msgid "Default entry for this selection list" msgstr "本选择列表的默认选项" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "已创建" @@ -1998,334 +2014,334 @@ msgstr "最近更新" msgid "Date and time that the selection list was last updated" msgstr "选择列表的最后更新时间" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "选择列表项" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "选择列表项" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "此选项归属的选择列表" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "选择列表项的值" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "选择列表项的标签" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "选择列表项的描述" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "该选择列表项是否处于激活状态?" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "参数模板" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "参数模板" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "勾选框参数不能有单位" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "复选框参数不能有选项" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "选择必须是唯一的" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "参数模板名称必须是唯一的" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "此参数模板的目标模型类型" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "参数名称" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "单位" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "此参数的物理单位" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "参数说明" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "勾选框" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "此参数是否为勾选框?" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "选项" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "此参数的有效选择 (逗号分隔)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "此参数的选择列表" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "已启用" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "此参数模板是否启用?" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "参数" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "参数" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "无效的参数值选择" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "为附件指定的模型类型无效" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "型号ID" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "此参数的目标模型的 ID" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "模板" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "参数模板" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "数据" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "参数值" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "备注" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "可选注释字段" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "扫描条码" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "条码数据" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "扫描条码的用户" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "时间戳" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "扫描条形码的日期和时间" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "处理条码的 URL 端点" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "上下文" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "扫描条形码的上下文数据" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "响应" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "扫描条形码的响应数据" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "结果" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "条码扫描成功吗?" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "发生错误" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8:邮件日志删除受保护。需设置 INVENTREE_PROTECT_EMAIL_LOG 为 False 以允许删除。" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "电子邮件信息" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "电子邮箱信息" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "已发布" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "已发送" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "失败" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "已送达" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "已确认" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "入站" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "出站" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "暂无回复消息" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "跟踪交付" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "已读追踪" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "点击追踪" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "全局ID" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "此消息的标识符 (可能由外部系统提供)" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "主题 ID" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "此消息主题的标识符 (可能由外部系统提供)" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "主题" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "链接到此消息的主题" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "优先" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "邮件主题" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "邮件主题" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "键" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "此主题的唯一密钥 (用于识别主题)" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "此主题的唯一标识符" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "内部服务已启动" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "该线程是否为内部启动的?" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "创建主题的日期和时间" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "主题最后更新的日期和时间" @@ -2375,1243 +2391,1259 @@ msgstr "表示设置是否被环境变量覆盖" msgid "Override" msgstr "覆盖" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "正在运行" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "等待完成的任务" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "预定的任务" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "失败的任务" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "任务ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "唯一任务ID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "锁定" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "锁定时间" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "任务名称" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "功能" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "功能名称" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "参数" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "任务参数" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "关键字参数" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "任务关键词参数" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "文件名" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "模型类型" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "用户无权为此模式创建或编辑附件" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "用户没有权限为此模型创建或编辑参数" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "选择列表已锁定" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "无分组" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "网站 URL 已配置为锁定" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "需要重启" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "设置已更改,需要服务器重启" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "等待迁移" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "待处理的数据库迁移数" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "活动的警告代码" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "活跃警告代码的字典" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "实例ID" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "此 InvenTree 实例的唯一标识符" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "公告 ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "在服务器状态信息中公开实例ID(未认证状态下)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "服务器实例名称" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "服务器实例的字符串描述符" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "使用实例名称" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "在标题栏中使用实例名称" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "限制显示 `关于` 信息" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "只向超级管理员显示关于信息" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "公司名称" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "内部公司名称" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "基本 URL" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "服务器实例的基准 URL" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "默认货币" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "系统价格计算使用的基准货币" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "支持币种" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "支持的货币代码列表" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "货币更新间隔时间" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "检查更新的频率(设置为零以禁用)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "天" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "币种更新插件" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "使用货币更新插件" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "从URL下载" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "允许从外部 URL 下载远程图片和文件" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "下载大小限制" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "远程图片的最大允许下载大小" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "用于从 URL 下载的 User-agent" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "允许覆盖用于从外部 URL 下载图片和文件的 user-agent(留空为默认值)" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "严格的 URL 验证" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "验证 URL 时需要 schema 规范" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "更新检查间隔" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "检查更新的频率(设置为零以禁用)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "自动备份" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "启用数据库和媒体文件的自动备份" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "自动备份间隔" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "指定自动备份之间的间隔天数" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "任务删除间隔" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "后台任务结果将在指定天数后删除" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "错误日志删除间隔" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "错误日志将在指定天数后被删除" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "通知删除间隔" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "用户通知将在指定天数后被删除" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "邮件自动清理周期" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "邮件将在指定天数后删除" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "保护邮件日志" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "防止邮件日志条目被删除" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "条形码支持" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "在网页界面启用条形码扫描器支持" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "存储条形码结果" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "存储条形码扫描结果" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "条形码扫描最大计数" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "保存的条形码扫描结果的最大数量" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "条形码扫描延迟设置" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "条形码输入处理延迟时间" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "启用摄像头扫码支持" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "允许通过网络摄像头扫描条形码" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "显示条形码数据" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "在浏览器中将条形码数据显示为文本" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "条形码生成插件" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "用于内部条形码数据生成的插件" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "零件修订" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "启用零件修订字段" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "仅限装配修订版本" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "仅允许对装配零件进行修订" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "允许从装配中删除" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "允许删除已在装配中使用的零件" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "IPN(内部零件号)正则规则" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "用于匹配IPN(内部零件号)格式的正则表达式" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "允许重复的 IPN(内部零件号)" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "允许多个零件共享相同的 IPN(内部零件号)" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "允许编辑 IPN(内部零件号)" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "允许编辑零件时更改IPN(内部零件号)" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "复制零件物料清单数据" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "复制零件时默认复制物料清单数据" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "复制零件参数数据" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "复制零件时默认复制参数数据" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "复制零件测试数据" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "复制零件时默认复制测试数据" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "复制类别参数模板" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "创建零件时复制类别参数模板" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "零件默认为模板" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "默认情况下,元件可由其他零件组装而成" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "组件" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "默认情况下,零件可用作子部件" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "可购买" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "默认情况下可购买零件" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "可销售" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "零件默认为可销售" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "默认情况下可跟踪零件" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "虚拟的" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "默认情况下,零件是虚拟的" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "显示关联零件" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "显示零件的关联零件" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "允许创建初始库存" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "允许在添加新零件时创建初始库存数据" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "允许创建供应商数据" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "允许在添加新零件时创建初始供应商数据" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "零件名称显示格式" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "显示零件名称的格式" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "零件类别默认图标" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "零件类别默认图标 (空表示没有图标)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "最小定价小数位数" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "呈现定价数据时显示的最小小数位数" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "最大定价小数位数" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "呈现定价数据时显示的最大小数位数" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "使用供应商定价" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "将供应商的批发价纳入整体价格计算" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "采购历史价优先" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "当存在历史采购订单价格时,将忽略供应商的批发价" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "使用库存项定价" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "使用手动输入的库存数据进行定价计算" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "库存项目定价时间" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "从定价计算中排除超过此天数的库存项目" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "使用变体定价" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "将产品变体的特殊定价纳入整体价格计算" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "仅限活跃变体" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "仅使用活跃变体零件计算变体价格" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "自动更新定价" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "当内部数据变化时自动更新零件价格" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "价格重建间隔" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "零件价格自动更新前的天数" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "内部价格" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "为零件启用内部核算价格功能" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "内部价格优先" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "若存在内部价格,将覆盖BOM价格区间计算结果" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "允许BOM数量为零" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" -msgstr "" +msgstr "允许 BOM 物料项的数量为零。启用后可使用装配 / 设置数量定义单次构建所需用量,与构建总数量无关" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "启用标签打印功能" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "启用从网络界面打印标签" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "标签图片 DPI" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "生成图像文件以供标签打印插件使用时的 DPI 分辨率" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "启用报告" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "启用报告生成" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "调试模式" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "以调试模式生成报告(HTML 输出)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "日志错误报告" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "记录生成报告时出现的错误" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "页面大小" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "PDF 报告默认页面大小" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "强制参数单位" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "如果提供了单位,参数值必须与指定的单位匹配" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "全局唯一序列号" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "库存项的序列号必须全局唯一" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "删除已耗尽的库存" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "设置库存耗尽时的默认行为" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "批号模板" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "为库存项生成默认批号的模板" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "库存过期" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "启用库存过期功能" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "销售过期库存" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "允许销售过期库存" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "库存临期预警天数" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "库存项过期前被标记为\"临期\"的天数" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "允许使用过期库存" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "允许在生产中使用已过期的库存" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "库存所有权管控" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "启用对库存地点和库存物品的归属权管理" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "库存地点默认图标" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "库存地点默认图标 (空表示没有图标)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "显示已安装的库存项" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "在库存列表中显示已被安装到设备中的库存项" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "在安装项目时检查物料清单" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "已安装的库存项目必须存在于上级零件的物料清单中" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "允许零库存调拨" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "允许对当前库存量为零的物品执行库位间调拨操作" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "生产订单参考模式" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "生成生产订单参考字段所需的模式" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "要求负责人" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "必须为每个订单分配一个负责人" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "需要活动零件" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "防止为非活动零件创建生产订单" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "需要锁定零件" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "防止为未锁定的零件创建生产订单" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "需要有效的物料清单" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "除非物料清单已验证,否则禁止创建生产订单" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "需要关闭子订单" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "在所有子订单关闭之前,阻止生产订单的完成" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "外部生产订单" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "启用外部生产订单功能" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "阻止直到测试通过" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "在所有必要的测试通过之前,阻止产出完成" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "启用订单退货" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "在用户界面中启用订单退货功能" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "退货订单参考模式" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "生成退货订单参考字段所需的模式" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "编辑已完成的退货订单" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "允许编辑已完成的退货订单" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "销售订单参考模式" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "生成销售订单参考字段所需参照模式" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "销售订单默认配送方式" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "启用创建销售订单的默认配送功能" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "编辑已完成的销售订单" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "允许在订单配送或完成后编辑销售订单" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "货件需核对" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "只有所有物品均经核对,才能确认发货完成" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "标记该订单为已完成?" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "标记为已发货的销售订单将自动完成,绕过“已发货”状态" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "采购订单参考模式" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "生成采购订单参考字段所需的模式" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "编辑已完成的采购订单" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "允许在采购订单已配送或完成后编辑订单" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "货币转换" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "收货时将物料价值折算为基准货币" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "自动完成采购订单" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "当收到所有行项目时,自动将采购订单标记为完成" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "忘记启用密码" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "在登录页面上启用忘记密码功能" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "启用注册" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "在登录页面为用户启用自行注册功能" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "启用SSO登录" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "在登录页面启用单点登录(SSO)功能" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "启用SSO注册" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "允许用户通过登录页面的SSO系统注册账号" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "启用SSO组同步" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "启用后,将自动同步InvenTree用户组与身份提供商(IdP)提供的用户组" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "SSO组属性键" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "身份提供商(IdP)返回的组信息声明属性名称" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "SSO组映射关系" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "将SSO用户组映射到本地InvenTree用户组的对应关系表。如果本地组不存在,系统会自动创建对应的用户组。" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "移除非SSO来源的用户组" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "当用户组未被身份提供商(IdP)支持时,是否移除该用户组。禁用此选项可能导致安全风险" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "必须提供邮箱" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "用户注册时必须提供邮箱" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "自动填充SSO用户信息" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "自动从SSO账户数据中填充用户详细信息" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "发两次邮件" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "注册时询问用户他们的电子邮件两次" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "两次输入密码" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "当注册时请用户输入密码两次" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "域名白名单" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "限制注册到某些域名 (逗号分隔,以 @ 开头)" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "注册默认分组" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "新用户注册时被分配的默认用户组。 如果启用了SSO组同步功能,当无法从身份提供商(IdP)分配组时才会应用此分组。" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "强制启用多因素安全认证" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "用户必须使用多因素安全认证。" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "启用此设置将要求所有用户设置多元素认证。所有会话将立即断开连接。" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "启动时检查插件" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "启动时检查全部插件是否已安装 - 在容器环境中启用" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "检查插件更新" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "启用定期检查已安装插件的更新" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "启用统一资源定位符集成" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "启用插件以添加统一资源定位符路由" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "启用导航集成" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "启用插件以集成到导航中" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "启用应用集成" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "启用插件添加应用" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "启用调度集成" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "启用插件来运行预定任务" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "启用事件集成" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "启用插件响应内部事件" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "启用界面集成" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "启用插件集成到用户界面" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "启用邮件集成" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "启用插件来处理发送/接收邮件" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "启用项目编码" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "启用项目编码来跟踪项目" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "启用盘点" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "启用历史库存水平及价值记录功能" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "排除外部地点" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" -msgstr "" +msgstr "将外部库位的库存物料排除在盘点计算之外" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "自动盘点周期" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" -msgstr "" +msgstr "自动库存盘点记录的间隔天数" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" -msgstr "" +msgstr "删除旧的盘点记录条目" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" -msgstr "" +msgstr "删除超过指定天数的库存盘点记录" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" -msgstr "" +msgstr "库存盘点记录删除周期" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" -msgstr "" +msgstr "库存盘点记录将在指定天数后自动删除" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" -msgstr "" +msgstr "删除旧的库存跟踪记录" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" -msgstr "" +msgstr "删除超过指定天数的库存跟踪记录" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" -msgstr "" +msgstr "库存跟踪记录删除周期" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" -msgstr "" +msgstr "库存跟踪记录将在指定天数后自动删除" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "显示用户全名" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "显示用户全名而不是用户名" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "显示用户配置" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "在用户个人资料页展示其档案信息" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "启用测试站数据" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "启用测试站数据收集以获取测试结果" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "启用设备状态检测" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "启用定期 Ping 检测,确认注册设备的运行状态" @@ -3958,33 +3990,33 @@ msgstr "零件已激活" msgid "Manufacturer is Active" msgstr "制造商处于活动状态" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "供应商零件处于激活状态" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "主供应商部件" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "内部零件已激活" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "供应商已激活" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "制造商" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "公司" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "有库存" @@ -4073,7 +4105,7 @@ msgstr "税号" msgid "Company Tax ID" msgstr "公司税号" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "地址" @@ -4165,7 +4197,7 @@ msgstr "内部使用的装运通知单" msgid "Link to address information (external)" msgstr "链接地址信息 (外部)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "制造商零件" @@ -4183,12 +4215,12 @@ msgstr "选择零件" msgid "Select manufacturer" msgstr "选择制造商" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "制造商零件编号" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "制造商零件编号" @@ -4212,8 +4244,8 @@ msgstr "包装单位必须大于零" msgid "Linked manufacturer part must reference the same base part" msgstr "链接的制造商零件必须引用相同的基础零件" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4224,7 +4256,7 @@ msgstr "供应商" msgid "Select supplier" msgstr "选择供应商" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "供应商库存管理单位" @@ -4238,7 +4270,7 @@ msgstr "主要的" #: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" -msgstr "" +msgstr "这是否为关联物料的主供应商物料?" #: company/models.py:803 msgid "Select manufacturer part" @@ -4260,8 +4292,8 @@ msgstr "基本费用" msgid "Minimum charge (e.g. stocking fee)" msgstr "最低费用(例如库存费)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "打包" @@ -4309,14 +4341,18 @@ msgstr "此供应商使用的默认货币" msgid "Company Name" msgstr "公司名称" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "有库存" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "批发价" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "数据导出过程中发生错误" @@ -4421,67 +4457,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "记录的现有数据库标识符" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "列已映射到数据库字段" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "字段已映射到数据列" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "列映射必须链接到有效的导入会话" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "数据文件中不存在列" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "目标模型中不存在字段" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "所选字段为只读" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "导入会话" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "字段" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "列" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "行索引" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "原始行数据" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "错误" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "有效" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "更新现有记录需要提供ID。" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "没有找到与提供的ID相关的记录" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "提供的ID格式无效" @@ -4581,7 +4617,7 @@ msgstr "每个标签要打印的份数" msgid "Connected" msgstr "已连接" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "未知" @@ -4713,7 +4749,7 @@ msgstr "进度类型的最大值。当 type=progress 时为必填项" msgid "Order Reference" msgstr "订单参考" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "未完成" @@ -4769,11 +4805,11 @@ msgstr "更新时间晚于" msgid "Has Pricing" msgstr "有定价" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "完成时间早于" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "完成时间晚于" @@ -4781,17 +4817,17 @@ msgstr "完成时间晚于" msgid "External Build Order" msgstr "外部生产订单" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "订单" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "订单完成" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "内部零件" @@ -4799,27 +4835,27 @@ msgstr "内部零件" msgid "Order Pending" msgstr "订单待定" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "已完成" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "有配送" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" -msgstr "" +msgstr "未找到发货记录" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "采购订单" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4827,8 +4863,8 @@ msgstr "采购订单" msgid "Sales Order" msgstr "销售订单" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4872,11 +4908,11 @@ msgstr "地址与所选公司不匹配" msgid "Order description (optional)" msgstr "订单描述 (可选)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "为此订单选择项目编码" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "链接到外部页面" @@ -4888,7 +4924,7 @@ msgstr "开始日期" msgid "Scheduled start date for this order" msgstr "本订单的预定开始日期" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "预计日期" @@ -4921,413 +4957,421 @@ msgstr "此订单的联系人" msgid "Company address for this order" msgstr "此订单的公司地址" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "订单参考" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "狀態" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "采购订单状态" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "订购物品的公司" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "供应商参考" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "供应商订单参考代码" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "接收人" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "订单完成日期" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "目的地" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "接收物品的目标" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "零件供应商必须与采购订单供应商匹配" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "行项目与采购订单不匹配" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "行项目缺少关联零件" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "数量必须是正数" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" -msgstr "" +msgstr "序列号不能分配给虚拟件" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "客户" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "出售物品的公司" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "销售订单状态" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "客户参考 " -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "客户订单参考代码" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "发货日期" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "发货人" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "订单已完成" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "订单已取消" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "只有未结订单才能标记为已完成" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "由于发货不完整,订单无法完成" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "由于缺货,订单无法完成" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "订单无法完成,因为行项目不完整" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "订单已锁定,不可修改" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "项目数量" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "行号" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "此项目的行号(可选)" + +#: order/models.py:1822 msgid "Line item reference" msgstr "行项目参考" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "行项目注释" -#: order/models.py:1822 +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "此行项目的目标日期 (留空以使用订单中的目标日期)" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "行项目描述 (可选)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "此行的附加上下文" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "单位价格" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "采购订单行项目" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "供应商零件必须与供应商匹配" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "生产订单必须标记为外部" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "生产订单仅可关联至装配零件" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "生产订单零件必须与行项目零件一致" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "供应商零件" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "已接收" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "收到的物品数量" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "采购价格" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "每单位的采购价格" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "外部生产订单需由此行项目履行" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "采购订单附加行" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "销售订单行项目" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "只有可销售的零件才能分配给销售订单" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "售出价格" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "单位售出价格" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "已配送" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "发货数量" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "销售订单发货" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "收货地址必须与该客户的资料一致" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "本次发货的收货地址" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "发货日期" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "送达日期" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "装运交货日期" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "审核人" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "检查此装运的用户" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "配送" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "配送单号" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "跟踪单号" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "配送跟踪信息" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "发票编号" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "相关发票的参考号" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "货物已发出" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "发货没有分配库存项目" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "货件必须先经核对,方可标记为完成" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "销售订单加行" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "销售订单分配" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "库存项目尚未分配" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "无法将库存项目分配给具有不同零件的行" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "无法将库存分配给没有零件的生产线" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "分配数量不能超过库存数量" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "分配的数量必须大于零" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "序列化库存项目的数量必须为1" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "销售订单与发货不匹配" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "发货与销售订单不匹配" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "行" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "销售订单发货参考" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "项目" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "选择要分配的库存项目" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "输入库存分配数量" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "退货订单参考" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "退回物品的公司" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "退货订单状态" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "退货订单行项目" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "必须指定库存项" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "退回数量超过库存数量" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "退回数量必须大于零" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "序列化库存项的数量无效" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "选择要从客户处退回的商品" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "接收日期" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "收到此退货的日期" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "结果" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "该行项目的结果" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "与此行项目的退货或维修相关的成本" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "退货订单附加行" @@ -5355,13 +5399,13 @@ msgstr "复制额外行" msgid "Copy extra line items from the original order" msgstr "从原始订单复制额外的行项目" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "复制参数" #: order/serializers.py:96 msgid "Copy order parameters from the original order" -msgstr "" +msgstr "从原始订单复制订单参数" #: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 @@ -5374,216 +5418,216 @@ msgstr "行项目" msgid "Completed Lines" msgstr "已完成行项目" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "复制订单" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "指定复制此订单的选项" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "订单ID不正确" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "供应商名称" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "订单不能取消" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "允许关闭行项目不完整的订单" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "订单中的行项目不完整" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "订单未打开" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "自动定价" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "根据供应商零件数据自动计算采购价格" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "购买价格货币" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "合并项目" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "将具有相同零件、目的地和目标日期的项目合并到一个行项目中" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "库存量单位" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "内部零件编号" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "内部零件名称" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "必须指定供应商零件" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "必须指定采购订单" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "供应商必须匹配采购订单" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "采购订单必须与供应商匹配" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "行项目" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "为收到的物品选择目的地位置" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "输入入库项目的批号" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "有效期至" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "输入入库库存项的有效期" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "输入入库库存项目的序列号" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "覆盖传入库存项目的包装资料" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "传入库存项目的附加说明" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "条形码" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "扫描条形码" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "条形码已被使用" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "必须提供行项目" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "必须指定目标位置" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "提供的条形码值必须是唯一的" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "配送" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "完成配送" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "已分配的行" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "售出价格货币" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "已分配的项目" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "未提供装运详细信息" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "行项目与此订单不关联" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "数量必须为正" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "输入要分配的序列号" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "货物已发出" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "发货与此订单无关" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "未找到以下序列号的匹配项" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "以下序列号不可用" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "退货订单行项目" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "行项目与退货订单不匹配" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "行项目已收到" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "只能根据正在进行的订单接收物品" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "退货数量" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "行价格货币" @@ -5740,7 +5784,7 @@ msgstr "元器件已激活" #: part/api.py:1297 msgid "Component part is trackable" -msgstr "" +msgstr "该零部件可追溯" #: part/api.py:1301 msgid "Component part is testable" @@ -5748,11 +5792,11 @@ msgstr "组件部份是可测试的" #: part/api.py:1305 msgid "Component part is an assembly" -msgstr "" +msgstr "该零部件是一个装配件" #: part/api.py:1309 msgid "Component part is virtual" -msgstr "" +msgstr "该零部件为虚拟件" #: part/api.py:1313 msgid "Has available stock" @@ -5799,7 +5843,7 @@ msgstr "此类别零件的默认关键字" msgid "Icon" msgstr "图标" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "图标(可选)" @@ -5820,7 +5864,7 @@ msgstr "默认值" msgid "Default Parameter Value" msgstr "默认参数值" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "零件" @@ -5865,7 +5909,7 @@ msgstr "零件不能是对自身的修订" #: part/models.py:783 msgid "Revision code must be specified for a part marked as a revision" -msgstr "" +msgstr "标记为带版本管理的物料必须指定版本代码" #: part/models.py:791 msgid "Revisions are only allowed for assembly parts" @@ -5935,7 +5979,7 @@ msgstr "提高搜索结果可见性的零件关键字" msgid "Part category" msgstr "零件类别" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "内部零件号 IPN" @@ -5944,7 +5988,7 @@ msgstr "内部零件号 IPN" msgid "Part revision or version number" msgstr "零件修订版本或版本号" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "版本" @@ -5968,7 +6012,7 @@ msgstr "默认到期" msgid "Expiry time (in days) for stock items of this part" msgstr "此零件库存项的过期时间 (天)" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "最低库存" @@ -6449,355 +6493,355 @@ msgstr "零件关系不能在零件和自身之间创建" msgid "Duplicate relationship already exists" msgstr "复制关系已经存在" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "上级类别" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "上级零件类别" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "子类别" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "结果" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "根据该模板记录的结果数量" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "购买此库存项的货币" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "文件不是一个图片" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "原始零件" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "选择要复制的原始零件" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "复制图片" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "从原零件复制图片" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "复制物料清单" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "从原始零件复制材料清单" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "从原始零件复制参数数据" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "复制备注" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "从原始零件复制备注" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "复制测试" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "从原始零件复制测试模板" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "初始化库存数量" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "指定此零件的初始库存数量。如果数量为零,则不添加任何库存。" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "初始化库存地点" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "初始化指定此零件的库存地点" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "选择供应商(或为空以跳过)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "选择制造商(或为空)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "制造商零件号" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "所选公司不是一个有效的供应商" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "所选公司不是一个有效的制造商" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "与此制造商零件编号 (MPN) 的相匹配的制造商零件已存在" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "匹配此库存单位 (SKU) 的供应商零件已存在" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "类别名称" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "正在生产" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "目前正在生产的零件数量" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "此零件计划待产数量" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "库存项" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "修订" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "库存总量" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "未分配的库存" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "变体库存" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "重复零件" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "从另一个零件复制初始数据" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "初始库存" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "创建具有初始库存数量的零件" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "供应商信息" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "添加此零件的初始供应商信息" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "复制类别参数" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "从选择的零件复制参数模版" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "现有的图片" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "现有零件图片的文件名" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "图片不存在" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "验证整个物料清单" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "可以创建" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "生产订单必填项" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "分配到生产订单" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "销售订单必填项" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "分配到销售订单" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "内部零件号" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "零件描述" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" -msgstr "" +msgstr "选择一个物料,以生成该物料(及其所有变型物料)的盘点信息" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" -msgstr "" +msgstr "选择一个分类,以包含该分类(及其子分类)下的所有物料" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" -msgstr "" +msgstr "选择一个库位,以包含该库位(含子库位)中有库存的所有物料" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" -msgstr "" +msgstr "生成盘点条目" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" -msgstr "" +msgstr "保存所选物料的盘点条目" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "生成报告" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" -msgstr "" +msgstr "为所选物料生成盘点报告" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "最低价格" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "覆盖已计算的最低价格值" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "最低价格货币" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "最高价格" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "覆盖已计算的最高价格值" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "最高价格货币" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "更新" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "更新这个零件的价格" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "无法将所提供的货币转换为 {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "最低价格不能高于最高价格。" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "最高价格不能低于最低价格" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" -msgstr "" +msgstr "数量必须大于或等于零" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "选择父装配" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "选择零部件" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "选择要复制物料清单的零件" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "移除现有数据" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "复制前删除现有的物料清单项目" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "包含继承的" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "包含从模板零件继承的物料清单项目" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "跳过无效行" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "启用此选项以跳过无效行" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "复制替代品零件" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "复制物料清单项目时复制替代品零件" @@ -7518,7 +7562,7 @@ msgstr "边框" msgid "Print a border around each label" msgstr "打印每个标签的边框" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "横屏模式" @@ -7598,64 +7642,77 @@ msgstr "为扫描 TME 条形码提供支持" msgid "The Supplier which acts as 'TME'" msgstr "作为‘TME’的供应商" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "只有员工用户可以管理插件" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "只有超级用户帐户可以管理插件" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "插件安装已禁用" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "没有为安装提供软件包名称或URL" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "包名或 URL 中有无效字符" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "插件安装成功" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "插件安装到 {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "在插件仓库中找不到插件" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "插件不是一个打包的插件" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "找不到插件包名称" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "只有员工用户可以管理插件" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "插件卸载已禁用" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "插件无法卸载,因为它目前处于激活状态" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "该插件为系统必需组件,无法卸载" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "该插件为示例插件,无法卸载" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "该插件为系统内置组件,无法卸载" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "插件未安装" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "未找到插件安装记录" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "插件卸载成功" @@ -7902,55 +7959,55 @@ msgstr "安装尚未确认" msgid "Either packagename or URL must be provided" msgstr "必须提供软件包名称或者URL" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "完全重载" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "执行插件库的完整重载" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "强制重载" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "强制重载插件库,即使已经加载" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "收集插件" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "收集插件并添加到注册表中" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "激活插件" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "激活此插件" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "强制插件不可停用" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "删除配置" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "从数据库中删除插件配置" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "该设置项适用的目标用户" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "项目" @@ -7966,7 +8023,7 @@ msgstr "插件不支持标签打印" msgid "Invalid label dimensions" msgstr "无效的标签尺寸" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "没有有效的项目提供到模板" @@ -7990,152 +8047,156 @@ msgstr "字母" msgid "Template file with this name already exists" msgstr "已存在具有此名称的模板" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "模版名称" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "模板说明" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "修订编号 (自动增量)" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "打印时附加到模型" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "打印时将报告输出保存为附件与链接模型实例" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "文件名样式" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "生成文件名模式" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "模板已启用" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "模版的目标模型类型" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "筛选器" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "模版查询筛选器 (逗号分隔的键值对列表)" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "模板包文件" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "PDF 报告的页面大小" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "横向渲染报告" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "合并" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "针对选定项目生成独立报" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "基于模板 {self.name} 生成的报告" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "模板语法错误" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "报告渲染错误" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "报告生成错误" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "报告合并输出错误" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "宽度 [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "标签宽度,以毫米为单位。" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "高度 [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "标签高度,以毫米为单位。" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "标签打印错误" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "代码片段" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "报告代码片段文件" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "代码片段文件描述" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "资产" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "报告资产文件" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "资产文件描述" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "选择报表模板" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "要包含在报告中的项目主键列表" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "选择标签模板" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "打印插件" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "选择用于标签打印的插件" @@ -8233,7 +8294,7 @@ msgstr "库存项测试报告" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "已安装的项目" @@ -8268,15 +8329,15 @@ msgstr "没有结果" #: report/templatetags/report.py:166 msgid "Invalid media file path" -msgstr "" +msgstr "无效的媒体文件路径" #: report/templatetags/report.py:185 msgid "Invalid static file path" -msgstr "" +msgstr "无效的静态文件路径" #: report/templatetags/report.py:287 msgid "Asset file not found" -msgstr "" +msgstr "未找到资源文件" #: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" @@ -8284,13 +8345,13 @@ msgstr "找不到图片文件" #: report/templatetags/report.py:430 msgid "No image file specified" -msgstr "" +msgstr "未指定图片文件" #: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "parpart_image 标签需要一个零件实例" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "公司_图片标签需要一个公司实例" @@ -8306,7 +8367,7 @@ msgstr "按顶级位置筛选" msgid "Include sub-locations in filtered results" msgstr "在筛选结果中包含子地点" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "上级地点" @@ -8390,7 +8451,7 @@ msgstr "过期日期前" msgid "Expiry date after" msgstr "过期日期后" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "过期" @@ -8524,7 +8585,7 @@ msgstr "必须指定零件" msgid "Stock items cannot be located into structural stock locations!" msgstr "库存项不能存放在结构性库存地点!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "无法为虚拟零件创建库存项" @@ -8569,7 +8630,7 @@ msgstr "为此库存项目选择匹配的供应商零件" msgid "Where is this stock item located?" msgstr "这个库存物品在哪里?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "包装此库存物品存储在" @@ -8585,7 +8646,7 @@ msgstr "此项目是否安装在另一个项目中?" msgid "Serial number for this item" msgstr "此项目的序列号" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "此库存项的批号" @@ -8698,7 +8759,7 @@ msgstr "库存项目前正在生产" msgid "Serialized stock cannot be merged" msgstr "序列化的库存不能合并" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "复制库存项" @@ -8822,7 +8883,7 @@ msgstr "选择要生成序列号的零件" msgid "Quantity of serial numbers to generate" msgstr "要生成的序列号的数量" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "此结果的测试模板" @@ -8846,222 +8907,222 @@ msgstr "父项" msgid "Parent stock item" msgstr "父库存项" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "添加时使用包装尺寸:定义的数量是包装的数量" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "包装规格" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "输入新项目的序列号" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "供应商零件编号" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "已过期" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "子项目" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "跟踪项目" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "此库存商品的购买价格,单位或包装" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "输入要序列化的库存项目数量" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "未提供库存项" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "数量不得超过现有库存量 ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "目标库存位置" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "此零件不能分配序列号" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "序列号已存在" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "选择要安装的库存项目" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "安装数量" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "输入要安装的项目数量" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "添加交易记录 (可选)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "安装数量必须至少为1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "库存项不可用" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "所选零件不在物料清单中" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "安装数量不得超过可用数量" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "已卸载项目的目标位置" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "选择要将库存项目转换为的零件" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "所选零件不是有效的转换选项" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "无法转换已分配供应商零件的库存项" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "库存项状态代码" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "选择要更改状态的库存项目" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "未选择库存商品" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "子位置" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "上级库存地点" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "零件必须可销售" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "物料已分配到销售订单" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "项目被分配到生产订单中" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "客户分配库存项目" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "所选公司不是客户" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "库存分配说明" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "必须提供库存物品清单" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "库存合并说明" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "允许不匹配的供应商" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "允许合并具有不同供应商零件的库存项目" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "允许不匹配的状态" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "允许合并具有不同状态代码的库存项目" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "必须提供至少两件库存物品" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "无更改" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "库存项主键值" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "库存项无现货" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "库存项已有现货" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "数量不得为负" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "库存交易记录" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "合并至现有库存" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "若可行,将退回项目合并至现有库存项" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "下一个序列号" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "上一个序列号" @@ -9543,83 +9604,99 @@ msgstr "销售订单" msgid "Return Orders" msgstr "退货订单" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "用户名" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "名" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "用户的名字(不包括姓氏)" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "姓" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "用户的姓氏" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "用户的电子邮件地址" -#: users/serializers.py:309 -msgid "Staff" -msgstr "职员" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "用户必须经过身份验证" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "此用户是否拥有员工权限" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "只有超级用户可以为另一个用户创建令牌" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "管理员" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "该用户是否拥有管理员权限" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "超级用户" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "此用户是否为超级用户" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "此用户帐户是否已激活" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "只有超级用户可以调整此字段" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "密码" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "用户密码" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "覆盖警告" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "覆盖有关密码规则的警告" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "管理员" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "该用户是否拥有管理员权限" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "你没有权限创建用户" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "您的账户已创建。" -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "请使用密码重置功能登录" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "欢迎使用 InvenTree" diff --git a/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po index 2cb94689bb..8086aac27f 100644 --- a/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-04 00:50+0000\n" -"PO-Revision-Date: 2026-04-04 00:53\n" +"POT-Creation-Date: 2026-04-21 02:25+0000\n" +"PO-Revision-Date: 2026-04-21 02:27\n" "Last-Translator: \n" "Language-Team: Chinese Traditional\n" "Language: zh_TW\n" @@ -49,7 +49,7 @@ msgstr "未提供資料" msgid "This field must be unique." msgstr "此欄位須唯一值。" -#: InvenTree/api.py:805 +#: InvenTree/api.py:832 msgid "User does not have permission to view this model" msgstr "用户沒有權限查閲當前模型。" @@ -88,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "不能將 {original} 轉換到 {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 +#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 msgid "Invalid quantity provided" msgstr "提供的數量無效" @@ -104,13 +104,13 @@ msgstr "輸入日期" msgid "Invalid decimal value" msgstr "無效的十進位數值" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 -#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 -#: order/models.py:1806 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504 +#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827 +#: order/models.py:1828 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 -#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 -#: stock/serializers.py:1467 stock/serializers.py:1666 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 +#: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" msgstr "備註" @@ -123,75 +123,91 @@ msgstr "值' {name}' 未出現在模式格式中" msgid "Provided value does not match required pattern: " msgstr "提供的值與所需模式不匹配:" -#: InvenTree/helpers.py:617 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "一次不能序列化超過 1000 個項目" -#: InvenTree/helpers.py:623 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "序號為空白" -#: InvenTree/helpers.py:652 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "複製序列號" -#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 -#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "無效的群組:{group}" -#: InvenTree/helpers.py:715 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "組範圍 {group} 超出了允許的數量 ({expected_quantity})" -#: InvenTree/helpers.py:781 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "未找到序列號" -#: InvenTree/helpers.py:788 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "唯一序列號數量 ({n}) 必須與數量 ({q}) 相符" -#: InvenTree/helpers.py:918 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "從這個值中刪除 HTML 標籤" -#: InvenTree/helpers.py:995 +#: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" msgstr "資料包含被禁止的 Markdown 內容" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "連接錯誤" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "服務器響應狀態碼無效" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "發生異常" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "服務器響應的內容長度值無效" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "圖片尺寸過大" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "圖片下載超出最大尺寸" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "遠程服務器返回了空響應" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "提供的 URL 不是一個有效的圖片文件" @@ -199,7 +215,7 @@ msgstr "提供的 URL 不是一個有效的圖片文件" msgid "Log in to the app" msgstr "登入此應用程式" -#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:197 msgid "Email" msgstr "電子郵件" @@ -252,18 +268,18 @@ msgid "Invalid choice" msgstr "無效的選項" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2520 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 -#: report/models.py:216 stock/models.py:86 +#: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "名稱" #: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: common/models.py:2258 common/models.py:2399 common/models.py:2563 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1851 part/models.py:1124 report/models.py:222 -#: report/models.py:815 report/models.py:841 +#: order/models.py:1873 part/models.py:1124 report/models.py:225 +#: report/models.py:818 report/models.py:844 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" @@ -273,7 +289,7 @@ msgstr "描述" msgid "Description (optional)" msgstr "描述(選填)" -#: InvenTree/models.py:1044 common/models.py:2841 +#: InvenTree/models.py:1044 common/models.py:2869 msgid "Path" msgstr "路徑" @@ -320,51 +336,51 @@ msgstr "伺服器紀錄了一個錯誤。" msgid "Image" msgstr "圖像" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4168 msgid "Must be a valid number" msgstr "必須是有效的數字" -#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 +#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "貨幣" -#: InvenTree/serializers.py:369 part/serializers.py:1355 +#: InvenTree/serializers.py:406 part/serializers.py:1387 msgid "Select currency from available options" msgstr "從可用選項中選擇貨幣" -#: InvenTree/serializers.py:719 +#: InvenTree/serializers.py:756 msgid "This field may not be null." msgstr "此欄位不可為空白。" -#: InvenTree/serializers.py:725 +#: InvenTree/serializers.py:762 msgid "Invalid value" msgstr "無效值" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:799 msgid "Remote Image" msgstr "遠程圖片" -#: InvenTree/serializers.py:763 +#: InvenTree/serializers.py:800 msgid "URL of remote image file" msgstr "遠程圖片文件的 URL" -#: InvenTree/serializers.py:781 +#: InvenTree/serializers.py:818 msgid "Downloading images from remote URL is not enabled" msgstr "未啓用從遠程 URL下載圖片" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:825 msgid "Failed to download image from remote URL" msgstr "從遠程URL下載圖像失敗" -#: InvenTree/serializers.py:871 +#: InvenTree/serializers.py:908 msgid "Invalid content type format" msgstr "不合規的內容類型格式" -#: InvenTree/serializers.py:874 +#: InvenTree/serializers.py:911 msgid "Content type not found" msgstr "內容類型未發現" -#: InvenTree/serializers.py:880 +#: InvenTree/serializers.py:917 msgid "Content type does not match required mixin class" msgstr "內容類型與所需的 mixin 類別不符" @@ -520,11 +536,11 @@ msgstr "中文 (簡體)" msgid "Chinese (Traditional)" msgstr "中文 (繁體)" -#: InvenTree/tasks.py:678 +#: InvenTree/tasks.py:677 msgid "Update Available" msgstr "有可用更新" -#: InvenTree/tasks.py:679 +#: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" msgstr "有新的 InvenTree 更新可用" @@ -536,7 +552,7 @@ msgstr "無效的物理單位" msgid "Not a valid currency code" msgstr "無效的貨幣代碼" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1380 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 #: order/serializers.py:123 msgid "Order Status" msgstr "訂單狀態" @@ -545,21 +561,21 @@ msgstr "訂單狀態" msgid "Parent Build" msgstr "上層生產工單" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:781 -#: order/api.py:1181 order/api.py:1482 stock/api.py:572 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "包含變體" #: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 -#: build/serializers.py:1205 build/serializers.py:1376 -#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 -#: order/api.py:309 order/api.py:313 order/api.py:938 order/api.py:1194 -#: order/api.py:1197 order/models.py:1969 order/models.py:2137 -#: order/models.py:2138 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: build/serializers.py:1213 build/serializers.py:1389 +#: build/serializers.py:1482 company/models.py:1037 company/serializers.py:447 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1991 order/models.py:2159 +#: order/models.py:2160 part/api.py:1132 part/api.py:1135 part/api.py:1348 #: part/models.py:527 part/models.py:3318 part/models.py:3461 #: part/models.py:3519 part/models.py:3540 part/models.py:3562 #: part/models.py:3703 part/models.py:3965 part/models.py:4384 -#: part/serializers.py:1304 part/serializers.py:1926 +#: part/serializers.py:1336 part/serializers.py:1990 #: 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 @@ -569,8 +585,8 @@ msgstr "包含變體" #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 #: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 -#: stock/serializers.py:941 templates/email/build_order_completed.html:17 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607 +#: stock/serializers.py:955 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 @@ -579,9 +595,9 @@ msgstr "包含變體" msgid "Part" msgstr "零件" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967 #: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "類別" @@ -653,16 +669,16 @@ msgstr "排除樹" msgid "Build must be cancelled before it can be deleted" msgstr "工單必須被取消才能被刪除" -#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 +#: build/api.py:444 build/serializers.py:1423 part/models.py:3999 msgid "Consumable" msgstr "耗材" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:447 build/serializers.py:1426 part/models.py:3993 msgid "Optional" msgstr "非必須項目" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "裝配" @@ -671,32 +687,32 @@ msgstr "裝配" msgid "Tracked" msgstr "追蹤中" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:456 build/serializers.py:1429 part/models.py:1265 msgid "Testable" msgstr "可測試" -#: build/api.py:466 order/api.py:1002 order/api.py:1370 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "訂單未完成" -#: build/api.py:476 build/serializers.py:1502 order/api.py:961 +#: build/api.py:476 build/serializers.py:1525 order/api.py:963 msgid "Allocated" msgstr "已分配" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1442 msgid "Consumed" msgstr "已消耗" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:424 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "可用數量" -#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 -#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:518 build/serializers.py:1527 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "已訂購" @@ -704,26 +720,26 @@ msgstr "已訂購" msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2002 +#: build/api.py:941 build/models.py:120 order/models.py:2024 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "生產工單" -#: build/api.py:955 build/api.py:959 build/serializers.py:360 -#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 -#: build/serializers.py:1258 order/api.py:1241 order/api.py:1246 -#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2026 -#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 -#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 -#: stock/serializers.py:1460 stock/serializers.py:1781 -#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:367 +#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263 +#: build/serializers.py:1269 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 +#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 +#: stock/serializers.py:1493 stock/serializers.py:1814 +#: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "地點" -#: build/api.py:967 part/serializers.py:1349 +#: build/api.py:967 part/serializers.py:1381 msgid "Output" msgstr "產出" @@ -767,8 +783,8 @@ msgstr "目標日期必須晚於開始日期" msgid "Build Order Reference" msgstr "生產工單代號" -#: build/models.py:259 build/serializers.py:1403 order/models.py:628 -#: order/models.py:1337 order/models.py:1799 order/models.py:2735 +#: build/models.py:259 build/serializers.py:1420 order/models.py:641 +#: order/models.py:1350 order/models.py:1821 order/models.py:2764 #: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 @@ -797,7 +813,7 @@ msgstr "銷售訂單代號" msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1085 +#: build/models.py:302 build/serializers.py:1092 msgid "Source Location" msgstr "來源倉儲地點" @@ -845,16 +861,16 @@ msgstr "生產狀態" msgid "Build status code" msgstr "生產狀態代碼" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:354 order/serializers.py:861 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "批號" -#: build/models.py:360 build/serializers.py:348 +#: build/models.py:360 build/serializers.py:355 msgid "Batch code for this build output" msgstr "此產出的批號" -#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: build/models.py:364 order/models.py:484 order/serializers.py:178 #: part/models.py:1328 msgid "Creation Date" msgstr "建立日期" @@ -875,7 +891,7 @@ msgstr "目標完成日期" msgid "Target date for build completion. Build will be overdue after this date." msgstr "生產的預計完成日期。若超過此日期則工單會逾期。" -#: build/models.py:384 order/models.py:681 order/models.py:2774 +#: build/models.py:384 order/models.py:694 order/models.py:2803 msgid "Completion Date" msgstr "完成日期" @@ -919,7 +935,7 @@ msgid "Priority of this build order" msgstr "此生產工單的優先程度" #: build/models.py:435 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1831 +#: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "專案代碼" @@ -948,7 +964,7 @@ msgstr "生產工單 {build} 已經完成" msgid "A build order has been completed" msgstr "一張生產工單已經完成" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:924 build/serializers.py:402 msgid "Serial numbers must be provided for trackable parts" msgstr "對於可跟蹤的零件,必須提供序列號" @@ -964,23 +980,23 @@ msgstr "產出已完成" msgid "Build output does not match Build Order" msgstr "產出與生產訂單不匹配" -#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 -#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 -#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 -#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:280 +#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739 +#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 +#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "數量必須大於零" -#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:285 msgid "Quantity cannot be greater than the output quantity" msgstr "數量不能大於輸出數量" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1189 build/serializers.py:601 msgid "Build output has not passed all required tests" msgstr "此產出尚未通過所有必要測試" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1192 build/serializers.py:596 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "產出 {serial} 未通過所有必要測試" @@ -1001,10 +1017,10 @@ msgstr "生產訂單行項目" msgid "Build object" msgstr "生產對象" -#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 -#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 -#: order/models.py:1782 order/models.py:2618 order/serializers.py:1678 -#: order/serializers.py:2115 part/models.py:3475 part/models.py:3987 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:266 +#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1016,7 +1032,7 @@ msgstr "生產對象" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" @@ -1051,15 +1067,15 @@ msgstr "有序號的品項數量必須為1" msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "分配的數量({q})不能超過可用的庫存數量({a})" -#: build/models.py:2003 order/models.py:2567 +#: build/models.py:2003 order/models.py:2596 msgid "Stock item is over-allocated" msgstr "庫存品項超額分配" -#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 -#: order/serializers.py:1515 order/serializers.py:1536 +#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230 +#: order/serializers.py:1620 order/serializers.py:1641 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 +#: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "庫存品項" @@ -1083,378 +1099,378 @@ msgstr "目的庫存品項" msgid "Build Level" msgstr "構建等級" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:129 part/serializers.py:1283 msgid "Part Name" msgstr "零件名稱" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:214 build/serializers.py:969 msgid "Build Output" msgstr "產出" -#: build/serializers.py:219 +#: build/serializers.py:226 msgid "Build output does not match the parent build" msgstr "產出與之前的生產不匹配" -#: build/serializers.py:223 +#: build/serializers.py:230 msgid "Output part does not match BuildOrder part" msgstr "產出零件與生產訂單零件不匹配" -#: build/serializers.py:227 +#: build/serializers.py:234 msgid "This build output has already been completed" msgstr "此產出已經完成" -#: build/serializers.py:241 +#: build/serializers.py:248 msgid "This build output is not fully allocated" msgstr "此產出尚未完全分配" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:267 build/serializers.py:316 msgid "Enter quantity for build output" msgstr "輸入產出數量" -#: build/serializers.py:331 +#: build/serializers.py:338 msgid "Integer quantity required for trackable parts" msgstr "可追蹤的零件數量必須為整數" -#: build/serializers.py:337 +#: build/serializers.py:344 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "因為BOM包含可追蹤的零件,所以數量必須為整數" -#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1682 -#: stock/serializers.py:714 +#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "序號" -#: build/serializers.py:355 +#: build/serializers.py:362 msgid "Enter serial numbers for build outputs" msgstr "輸出產出的序列號" -#: build/serializers.py:361 +#: build/serializers.py:368 msgid "Stock location for build output" msgstr "生產輸出的庫存地點" -#: build/serializers.py:376 +#: build/serializers.py:383 msgid "Auto Allocate Serial Numbers" msgstr "自動分配序號" -#: build/serializers.py:378 +#: build/serializers.py:385 msgid "Automatically allocate required items with matching serial numbers" msgstr "自動為需要項目分配對應的序號" -#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186 #: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "序號已存在或無效" -#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 +#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608 msgid "A list of build outputs must be provided" msgstr "必須提供產出清單" -#: build/serializers.py:486 +#: build/serializers.py:493 msgid "Stock location for scrapped outputs" msgstr "廢品產出的庫存位置" -#: build/serializers.py:492 +#: build/serializers.py:499 msgid "Discard Allocations" msgstr "放棄分配" -#: build/serializers.py:493 +#: build/serializers.py:500 msgid "Discard any stock allocations for scrapped outputs" msgstr "取消對廢品產出的任何庫存分配" -#: build/serializers.py:498 +#: build/serializers.py:505 msgid "Reason for scrapping build output(s)" msgstr "廢品產出的原因" -#: build/serializers.py:556 +#: build/serializers.py:563 msgid "Location for completed build outputs" msgstr "已完成刪除的庫存地點" -#: build/serializers.py:564 +#: build/serializers.py:571 msgid "Accept Incomplete Allocation" msgstr "接受不完整的分配" -#: build/serializers.py:565 +#: build/serializers.py:572 msgid "Complete outputs if stock has not been fully allocated" msgstr "如果庫存尚未全部分配,則完成產出" -#: build/serializers.py:690 +#: build/serializers.py:697 msgid "Consume Allocated Stock" msgstr "消費已分配的庫存" -#: build/serializers.py:691 +#: build/serializers.py:698 msgid "Consume any stock which has already been allocated to this build" msgstr "消耗已分配給此生產的任何庫存" -#: build/serializers.py:697 +#: build/serializers.py:704 msgid "Remove Incomplete Outputs" msgstr "移除未完成的產出" -#: build/serializers.py:698 +#: build/serializers.py:705 msgid "Delete any build outputs which have not been completed" msgstr "刪除所有未完成的產出" -#: build/serializers.py:725 +#: build/serializers.py:732 msgid "Not permitted" msgstr "不允許" -#: build/serializers.py:726 +#: build/serializers.py:733 msgid "Accept as consumed by this build order" msgstr "接受作為此生產訂單的消費" -#: build/serializers.py:727 +#: build/serializers.py:734 msgid "Deallocate before completing this build order" msgstr "完成此生產訂單前取消分配" -#: build/serializers.py:754 +#: build/serializers.py:761 msgid "Overallocated Stock" msgstr "超出分配的庫存" -#: build/serializers.py:757 +#: build/serializers.py:764 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "如何處理分配給生產訂單的額外庫存項" -#: build/serializers.py:768 +#: build/serializers.py:775 msgid "Some stock items have been overallocated" msgstr "有庫存項目已被過度分配" -#: build/serializers.py:773 +#: build/serializers.py:780 msgid "Accept Unallocated" msgstr "接受未分配" -#: build/serializers.py:775 +#: build/serializers.py:782 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "接受庫存項未被完全分配至生產訂單" -#: build/serializers.py:786 +#: build/serializers.py:793 msgid "Required stock has not been fully allocated" msgstr "所需庫存尚未完全分配" -#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1583 +#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "接受不完整" -#: build/serializers.py:793 +#: build/serializers.py:800 msgid "Accept that the required number of build outputs have not been completed" msgstr "允許所需數量的產出未完成" -#: build/serializers.py:804 +#: build/serializers.py:811 msgid "Required build quantity has not been completed" msgstr "未完成所需生產數量" -#: build/serializers.py:816 +#: build/serializers.py:823 msgid "Build order has open child build orders" msgstr "生產訂單有打開的子生產訂單" -#: build/serializers.py:819 +#: build/serializers.py:826 msgid "Build order must be in production state" msgstr "生產訂單必須處於生產狀態" -#: build/serializers.py:822 +#: build/serializers.py:829 msgid "Build order has incomplete outputs" msgstr "生產訂單有未完成的產出" -#: build/serializers.py:861 +#: build/serializers.py:868 msgid "Build Line" msgstr "生產行" -#: build/serializers.py:869 +#: build/serializers.py:876 msgid "Build output" msgstr "產出" -#: build/serializers.py:877 +#: build/serializers.py:884 msgid "Build output must point to the same build" msgstr "生產產出必須指向相同的生產" -#: build/serializers.py:908 +#: build/serializers.py:915 msgid "Build Line Item" msgstr "生產行項目" -#: build/serializers.py:926 +#: build/serializers.py:933 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part 必須與生產訂單零件相同" -#: build/serializers.py:942 stock/serializers.py:1329 +#: build/serializers.py:949 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "商品必須有庫存" -#: build/serializers.py:985 order/serializers.py:1569 +#: build/serializers.py:992 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "可用量 ({q}) 超出限制" -#: build/serializers.py:991 +#: build/serializers.py:998 msgid "Build output must be specified for allocation of tracked parts" msgstr "對於被追蹤的零件的分配,必須指定生產產出" -#: build/serializers.py:999 +#: build/serializers.py:1006 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "對於未被追蹤的零件,無法指定生產產出" -#: build/serializers.py:1023 order/serializers.py:1842 +#: build/serializers.py:1030 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "必須提供分配項目" -#: build/serializers.py:1087 +#: build/serializers.py:1094 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "零件來源的庫存地點(留空則可來源於任何庫存地點)" -#: build/serializers.py:1096 +#: build/serializers.py:1103 msgid "Exclude Location" msgstr "排除位置" -#: build/serializers.py:1097 +#: build/serializers.py:1104 msgid "Exclude stock items from this selected location" msgstr "從該選定的庫存地點排除庫存項" -#: build/serializers.py:1102 +#: build/serializers.py:1109 msgid "Interchangeable Stock" msgstr "可互換庫存" -#: build/serializers.py:1103 +#: build/serializers.py:1110 msgid "Stock items in multiple locations can be used interchangeably" msgstr "在多個位置的庫存項目可以互換使用" -#: build/serializers.py:1108 +#: build/serializers.py:1115 msgid "Substitute Stock" msgstr "替代品庫存" -#: build/serializers.py:1109 +#: build/serializers.py:1116 msgid "Allow allocation of substitute parts" msgstr "允許分配可替換的零件" -#: build/serializers.py:1114 +#: build/serializers.py:1121 msgid "Optional Items" msgstr "可選項目" -#: build/serializers.py:1115 +#: build/serializers.py:1122 msgid "Allocate optional BOM items to build order" msgstr "分配可選的物料清單給生產訂單" -#: build/serializers.py:1121 +#: build/serializers.py:1128 msgid "All Items" msgstr "全部品項" -#: build/serializers.py:1122 +#: build/serializers.py:1129 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1130 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1132 msgid "Item Type" msgstr "品項類型" -#: build/serializers.py:1126 +#: build/serializers.py:1133 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1187 msgid "BOM Reference" msgstr "物料清單參考" -#: build/serializers.py:1186 +#: build/serializers.py:1193 msgid "BOM Part ID" msgstr "物料清單零件識別號碼" -#: build/serializers.py:1193 +#: build/serializers.py:1200 msgid "BOM Part Name" msgstr "物料清單零件名稱" -#: build/serializers.py:1242 +#: build/serializers.py:1252 msgid "Install Into" msgstr "安裝至" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1281 build/serializers.py:1510 msgid "Build" msgstr "生產" -#: build/serializers.py:1288 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:605 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1301 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:623 +#: stock/models.py:1043 stock/serializers.py:586 msgid "Supplier Part" msgstr "供應商零件" -#: build/serializers.py:1304 stock/serializers.py:635 +#: build/serializers.py:1317 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "已分配數量" -#: build/serializers.py:1371 +#: build/serializers.py:1384 msgid "Build Reference" msgstr "構建參考" -#: build/serializers.py:1381 +#: build/serializers.py:1394 msgid "Part Category Name" msgstr "零件類別名稱" -#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1259 +#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "可追蹤" -#: build/serializers.py:1418 +#: build/serializers.py:1435 msgid "Inherited" msgstr "已繼承的" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1438 part/models.py:4072 msgid "Allow Variants" msgstr "允許變體" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793 #: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "物料清單項" -#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201 +#: part/serializers.py:1796 msgid "In Production" msgstr "生產中" -#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 +#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "排程生產中" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1533 part/serializers.py:885 msgid "External Stock" msgstr "外部庫存" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "可用庫存" -#: build/serializers.py:1513 +#: build/serializers.py:1536 msgid "Available Substitute Stock" msgstr "可用的替代品庫存" -#: build/serializers.py:1516 +#: build/serializers.py:1539 msgid "Available Variant Stock" msgstr "可用的變體庫存" -#: build/serializers.py:1729 +#: build/serializers.py:1752 msgid "Consumed quantity exceeds allocated quantity" msgstr "消耗數量超過已分配數量" -#: build/serializers.py:1766 +#: build/serializers.py:1789 msgid "Optional notes for the stock consumption" msgstr "庫存耗用的可選備註" -#: build/serializers.py:1783 +#: build/serializers.py:1806 msgid "Build item must point to the correct build order" msgstr "生產項必須指向正確的生產工單" -#: build/serializers.py:1788 +#: build/serializers.py:1811 msgid "Duplicate build item allocation" msgstr "重複的生產項分配" -#: build/serializers.py:1806 +#: build/serializers.py:1829 msgid "Build line must point to the correct build order" msgstr "生產行必須指向正確的生產工單" -#: build/serializers.py:1811 +#: build/serializers.py:1834 msgid "Duplicate build line allocation" msgstr "重複的生產行分配" -#: build/serializers.py:1823 +#: build/serializers.py:1846 msgid "At least one item or line must be provided" msgstr "至少必須提供一個項目或一行" @@ -1478,7 +1494,7 @@ msgstr "被掛起" msgid "Cancelled" msgstr "已取消" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" @@ -1502,19 +1518,19 @@ msgstr "逾期的生產訂單" msgid "Build order {bo} is now overdue" msgstr "生產訂單 {bo} 現已逾期" -#: common/api.py:723 +#: common/api.py:722 msgid "Is Link" msgstr "是否鏈接" -#: common/api.py:731 +#: common/api.py:730 msgid "Is File" msgstr "是否為文件" -#: common/api.py:778 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "用户沒有權限刪除此附件" -#: common/api.py:791 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "用户沒有權限刪除此附件" @@ -1534,11 +1550,11 @@ msgstr "未提供有效的貨幣代碼" msgid "No plugin" msgstr "暫無插件" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "項目編碼標籤" -#: common/models.py:106 common/models.py:131 common/models.py:3176 +#: common/models.py:106 common/models.py:131 common/models.py:3204 msgid "Updated" msgstr "已是最新" @@ -1600,7 +1616,7 @@ msgstr "鍵字符串必須是唯一的" #: common/models.py:1346 common/models.py:1347 common/models.py:1451 #: common/models.py:1452 common/models.py:1697 common/models.py:1698 -#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: common/models.py:2030 common/models.py:2031 common/models.py:2857 #: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 @@ -1612,8 +1628,8 @@ msgstr "使用者" msgid "Price break quantity" msgstr "批發價數量" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1868 -#: order/models.py:3071 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 +#: order/models.py:3100 msgid "Price" msgstr "價格" @@ -1633,10 +1649,10 @@ msgstr "接收此網絡鈎子的端點" msgid "Name for this webhook" msgstr "此網絡鈎子的名稱" -#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: common/models.py:1443 common/models.py:2271 common/models.py:2406 #: company/models.py:194 company/models.py:786 machine/models.py:40 #: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "激活" @@ -1660,11 +1676,11 @@ msgstr "密鑰" msgid "Shared secret for HMAC" msgstr "HMAC共享密鑰" -#: common/models.py:1577 common/models.py:3066 +#: common/models.py:1577 common/models.py:3094 msgid "Message ID" msgstr "消息ID" -#: common/models.py:1578 common/models.py:3056 +#: common/models.py:1578 common/models.py:3084 msgid "Unique identifier for this message" msgstr "此郵件的唯一標識符" @@ -1714,7 +1730,7 @@ msgstr "標題" #: common/models.py:1750 common/models.py:2013 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1812 order/models.py:2373 +#: order/models.py:462 order/models.py:1834 order/models.py:2395 #: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" @@ -1732,7 +1748,7 @@ msgstr "作者" msgid "Summary" msgstr "摘要" -#: common/models.py:1759 common/models.py:3033 +#: common/models.py:1759 common/models.py:3061 msgid "Read" msgstr "閲讀" @@ -1797,7 +1813,7 @@ msgstr "缺少檔案" msgid "Missing external link" msgstr "缺少外部連結" -#: common/models.py:1996 common/models.py:2514 +#: common/models.py:1996 common/models.py:2542 msgid "Model type" msgstr "模型類型" @@ -1833,7 +1849,7 @@ msgstr "文件大小" msgid "File size in bytes" msgstr "文件大小,以字節為單位" -#: common/models.py:2081 common/serializers.py:787 +#: common/models.py:2081 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "為附件指定的模型類型無效" @@ -1861,7 +1877,7 @@ msgstr "邏輯密鑰" msgid "State logical key that is equal to this custom state in business logic" msgstr "等同於商業邏輯中自定義狀態的狀態邏輯鍵" -#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "值" @@ -1874,7 +1890,7 @@ msgstr "將儲存於模型資料庫中的數值" msgid "Name of the state" msgstr "狀態名" -#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 msgid "Label" msgstr "標籤" @@ -1930,7 +1946,7 @@ msgstr "邏輯密鑰必須在參考狀態的邏輯鍵中" msgid "Name must be different from the names of the reference status" msgstr "名稱必須不同於參考狀態的名稱" -#: common/models.py:2246 common/models.py:2353 common/models.py:2559 +#: common/models.py:2246 common/models.py:2381 common/models.py:2587 msgid "Selection List" msgstr "選擇列表" @@ -1982,7 +1998,7 @@ msgstr "預設項目" msgid "Default entry for this selection list" msgstr "此選擇列表的預設項目" -#: common/models.py:2302 common/models.py:3171 +#: common/models.py:2302 common/models.py:3199 msgid "Created" msgstr "已創建" @@ -1998,334 +2014,334 @@ msgstr "最近更新" msgid "Date and time that the selection list was last updated" msgstr "選擇列表最近更新的日期與時間" -#: common/models.py:2343 +#: common/models.py:2371 msgid "Selection List Entry" msgstr "選擇列表項目" -#: common/models.py:2344 +#: common/models.py:2372 msgid "Selection List Entries" msgstr "選擇列表項目" -#: common/models.py:2354 +#: common/models.py:2382 msgid "Selection list to which this entry belongs" msgstr "該項目所屬的選擇列表" -#: common/models.py:2360 +#: common/models.py:2388 msgid "Value of the selection list entry" msgstr "選擇列表項目的值" -#: common/models.py:2366 +#: common/models.py:2394 msgid "Label for the selection list entry" msgstr "選擇列表項目的標籤" -#: common/models.py:2372 +#: common/models.py:2400 msgid "Description of the selection list entry" msgstr "選擇列表項目的描述" -#: common/models.py:2379 +#: common/models.py:2407 msgid "Is this selection list entry active?" msgstr "此選擇列表項目是否啟用?" -#: common/models.py:2413 +#: common/models.py:2441 msgid "Parameter Template" msgstr "參數模板" -#: common/models.py:2414 +#: common/models.py:2442 msgid "Parameter Templates" msgstr "" -#: common/models.py:2451 +#: common/models.py:2479 msgid "Checkbox parameters cannot have units" msgstr "勾選框參數不能有單位" -#: common/models.py:2456 +#: common/models.py:2484 msgid "Checkbox parameters cannot have choices" msgstr "複選框參數不能有選項" -#: common/models.py:2476 part/models.py:3667 +#: common/models.py:2504 part/models.py:3667 msgid "Choices must be unique" msgstr "選擇必須是唯一的" -#: common/models.py:2493 +#: common/models.py:2521 msgid "Parameter template name must be unique" msgstr "參數模板名稱必須是唯一的" -#: common/models.py:2515 +#: common/models.py:2543 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2521 +#: common/models.py:2549 msgid "Parameter Name" msgstr "參數名稱" -#: common/models.py:2527 part/models.py:1240 +#: common/models.py:2555 part/models.py:1240 msgid "Units" msgstr "單位" -#: common/models.py:2528 +#: common/models.py:2556 msgid "Physical units for this parameter" msgstr "此參數的物理單位" -#: common/models.py:2536 +#: common/models.py:2564 msgid "Parameter description" msgstr "參數説明" -#: common/models.py:2542 +#: common/models.py:2570 msgid "Checkbox" msgstr "勾選框" -#: common/models.py:2543 +#: common/models.py:2571 msgid "Is this parameter a checkbox?" msgstr "此參數是否為勾選框?" -#: common/models.py:2548 part/models.py:3754 +#: common/models.py:2576 part/models.py:3754 msgid "Choices" msgstr "選項" -#: common/models.py:2549 +#: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" msgstr "此參數的有效選擇 (逗號分隔)" -#: common/models.py:2560 +#: common/models.py:2588 msgid "Selection list for this parameter" msgstr "此參數的選擇清單" -#: common/models.py:2565 part/models.py:3729 report/models.py:287 +#: common/models.py:2593 part/models.py:3729 report/models.py:290 msgid "Enabled" msgstr "已啓用" -#: common/models.py:2566 +#: common/models.py:2594 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2607 +#: common/models.py:2635 msgid "Parameter" msgstr "參數" -#: common/models.py:2608 +#: common/models.py:2636 msgid "Parameters" msgstr "參數集" -#: common/models.py:2654 +#: common/models.py:2682 msgid "Invalid choice for parameter value" msgstr "無效的參數值選擇" -#: common/models.py:2724 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2760 +#: common/models.py:2788 msgid "Model ID" msgstr "" -#: common/models.py:2761 +#: common/models.py:2789 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2770 common/setting/system.py:464 report/models.py:373 -#: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:244 +#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 +#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: stock/serializers.py:245 msgid "Template" msgstr "模板" -#: common/models.py:2771 +#: common/models.py:2799 msgid "Parameter template" msgstr "" -#: common/models.py:2776 common/models.py:2818 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "數據" -#: common/models.py:2777 +#: common/models.py:2805 msgid "Parameter Value" msgstr "參數值" -#: common/models.py:2786 company/models.py:826 order/serializers.py:852 -#: order/serializers.py:2031 part/models.py:4047 part/models.py:4416 +#: common/models.py:2814 company/models.py:826 order/serializers.py:895 +#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:828 +#: stock/serializers.py:842 msgid "Note" msgstr "備註" -#: common/models.py:2787 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "可選註釋字段" -#: common/models.py:2814 +#: common/models.py:2842 msgid "Barcode Scan" msgstr "掃描條碼" -#: common/models.py:2819 +#: common/models.py:2847 msgid "Barcode data" msgstr "條碼數據" -#: common/models.py:2830 +#: common/models.py:2858 msgid "User who scanned the barcode" msgstr "掃描條碼" -#: common/models.py:2835 importer/models.py:70 +#: common/models.py:2863 importer/models.py:70 msgid "Timestamp" msgstr "時間戳" -#: common/models.py:2836 +#: common/models.py:2864 msgid "Date and time of the barcode scan" msgstr "掃描條碼的日期和時間" -#: common/models.py:2842 +#: common/models.py:2870 msgid "URL endpoint which processed the barcode" msgstr "處理條碼的 URL 終點" -#: common/models.py:2849 order/models.py:1858 plugin/serializers.py:93 +#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" msgstr "上下文" -#: common/models.py:2850 +#: common/models.py:2878 msgid "Context data for the barcode scan" msgstr "掃描條碼的上下文數據" -#: common/models.py:2857 +#: common/models.py:2885 msgid "Response" msgstr "響應" -#: common/models.py:2858 +#: common/models.py:2886 msgid "Response data from the barcode scan" msgstr "掃描條碼的響應數據" -#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" msgstr "結果" -#: common/models.py:2865 +#: common/models.py:2893 msgid "Was the barcode scan successful?" msgstr "條碼掃描成功嗎?" -#: common/models.py:2947 +#: common/models.py:2975 msgid "An error occurred" msgstr "發生錯誤" -#: common/models.py:2968 +#: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8:已保護電子郵件日誌刪除。請將 INVENTREE_PROTECT_EMAIL_LOG 設為 False 以允許刪除。" -#: common/models.py:3015 +#: common/models.py:3043 msgid "Email Message" msgstr "電子郵件訊息" -#: common/models.py:3016 +#: common/models.py:3044 msgid "Email Messages" msgstr "電子郵件訊息" -#: common/models.py:3023 +#: common/models.py:3051 msgid "Announced" msgstr "已公告" -#: common/models.py:3025 +#: common/models.py:3053 msgid "Sent" msgstr "已發送" -#: common/models.py:3026 +#: common/models.py:3054 msgid "Failed" msgstr "失敗" -#: common/models.py:3029 +#: common/models.py:3057 msgid "Delivered" msgstr "已送達" -#: common/models.py:3037 +#: common/models.py:3065 msgid "Confirmed" msgstr "已確認" -#: common/models.py:3043 +#: common/models.py:3071 msgid "Inbound" msgstr "入站" -#: common/models.py:3044 +#: common/models.py:3072 msgid "Outbound" msgstr "出站" -#: common/models.py:3049 +#: common/models.py:3077 msgid "No Reply" msgstr "不回覆" -#: common/models.py:3050 +#: common/models.py:3078 msgid "Track Delivery" msgstr "追蹤投遞" -#: common/models.py:3051 +#: common/models.py:3079 msgid "Track Read" msgstr "追蹤已讀" -#: common/models.py:3052 +#: common/models.py:3080 msgid "Track Click" msgstr "追蹤點擊" -#: common/models.py:3055 common/models.py:3158 +#: common/models.py:3083 common/models.py:3186 msgid "Global ID" msgstr "全域 ID" -#: common/models.py:3068 +#: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" msgstr "此訊息的識別碼(可能由外部系統提供)" -#: common/models.py:3075 +#: common/models.py:3103 msgid "Thread ID" msgstr "討論串 ID" -#: common/models.py:3077 +#: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "此訊息討論串的識別碼(可能由外部系統提供)" -#: common/models.py:3086 +#: common/models.py:3114 msgid "Thread" msgstr "討論串" -#: common/models.py:3087 +#: common/models.py:3115 msgid "Linked thread for this message" msgstr "此訊息所連結的討論串" -#: common/models.py:3103 +#: common/models.py:3131 msgid "Priority" msgstr "優先序" -#: common/models.py:3145 +#: common/models.py:3173 msgid "Email Thread" msgstr "電子郵件討論串" -#: common/models.py:3146 +#: common/models.py:3174 msgid "Email Threads" msgstr "電子郵件討論串" -#: common/models.py:3152 generic/states/serializers.py:16 +#: common/models.py:3180 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "鍵" -#: common/models.py:3155 +#: common/models.py:3183 msgid "Unique key for this thread (used to identify the thread)" msgstr "此討論串的唯一鍵(用於辨識)" -#: common/models.py:3159 +#: common/models.py:3187 msgid "Unique identifier for this thread" msgstr "此討論串的唯一識別碼" -#: common/models.py:3166 +#: common/models.py:3194 msgid "Started Internal" msgstr "內部建立" -#: common/models.py:3167 +#: common/models.py:3195 msgid "Was this thread started internally?" msgstr "此討論串是否為內部建立?" -#: common/models.py:3172 +#: common/models.py:3200 msgid "Date and time that the thread was created" msgstr "討論串建立的日期時間" -#: common/models.py:3177 +#: common/models.py:3205 msgid "Date and time that the thread was last updated" msgstr "討論串最後更新的日期時間" @@ -2375,1243 +2391,1259 @@ msgstr "表示此設定是否被環境變數覆蓋" msgid "Override" msgstr "覆蓋" -#: common/serializers.py:601 +#: common/serializers.py:610 msgid "Is Running" msgstr "正在運行" -#: common/serializers.py:607 +#: common/serializers.py:616 msgid "Pending Tasks" msgstr "等待完成的任務" -#: common/serializers.py:613 +#: common/serializers.py:622 msgid "Scheduled Tasks" msgstr "預定的任務" -#: common/serializers.py:619 +#: common/serializers.py:628 msgid "Failed Tasks" msgstr "失敗的任務" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Task ID" msgstr "任務ID" -#: common/serializers.py:634 +#: common/serializers.py:643 msgid "Unique task ID" msgstr "唯一任務ID" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock" msgstr "鎖定" -#: common/serializers.py:636 +#: common/serializers.py:645 msgid "Lock time" msgstr "鎖定時間" -#: common/serializers.py:638 +#: common/serializers.py:647 msgid "Task name" msgstr "任務名稱" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function" msgstr "功能" -#: common/serializers.py:640 +#: common/serializers.py:649 msgid "Function name" msgstr "功能名稱" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Arguments" msgstr "參數" -#: common/serializers.py:642 +#: common/serializers.py:651 msgid "Task arguments" msgstr "任務參數" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Keyword Arguments" msgstr "關鍵字參數" -#: common/serializers.py:645 +#: common/serializers.py:654 msgid "Task keyword arguments" msgstr "任務關鍵詞參數" -#: common/serializers.py:755 +#: common/serializers.py:764 msgid "Filename" msgstr "檔案名稱" -#: common/serializers.py:762 common/serializers.py:829 -#: common/serializers.py:904 importer/models.py:90 report/api.py:41 -#: report/models.py:293 report/serializers.py:52 +#: common/serializers.py:771 common/serializers.py:838 +#: common/serializers.py:914 importer/models.py:90 report/api.py:41 +#: report/models.py:296 report/serializers.py:71 msgid "Model Type" msgstr "模型類型" -#: common/serializers.py:790 +#: common/serializers.py:799 msgid "User does not have permission to create or edit attachments for this model" msgstr "用户無權為此模式創建或編輯附件" -#: common/serializers.py:885 +#: common/serializers.py:895 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "選擇列表已鎖定" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "無分組" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "網站 URL 已配置為鎖定" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "需要重啓" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "設置已更改,需要服務器重啓" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "等待遷移" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "待處理的數據庫遷移數" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "啟用中的警告碼" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "啟用中警告碼的字典" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "實例 ID" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "此 InvenTree 實例的唯一識別碼" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "公告 ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "在伺服器狀態資訊中公告此伺服器的實例 ID(未驗證也可見)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "服務器實例名稱" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "服務器實例的字符串描述符" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "使用實例名稱" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "在標題欄中使用實例名稱" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "限制顯示 `關於` 信息" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "只向超級管理員顯示關於信息" -#: common/setting/system.py:238 company/models.py:147 company/models.py:148 +#: common/setting/system.py:239 +msgid "Show superuser banner" +msgstr "" + +#: common/setting/system.py:240 +msgid "Show a warning banner in the UI when logged in as superuser" +msgstr "" + +#: common/setting/system.py:245 +msgid "Show admin banner" +msgstr "" + +#: common/setting/system.py:246 +msgid "Show a warning banner in the UI when logged in as admin" +msgstr "" + +#: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "公司名稱" -#: common/setting/system.py:239 +#: common/setting/system.py:252 msgid "Internal company name" msgstr "內部公司名稱" -#: common/setting/system.py:243 +#: common/setting/system.py:256 msgid "Base URL" msgstr "基本 URL" -#: common/setting/system.py:244 +#: common/setting/system.py:257 msgid "Base URL for server instance" msgstr "服務器實例的基準 URL" -#: common/setting/system.py:250 +#: common/setting/system.py:263 msgid "Default Currency" msgstr "默認貨幣單位" -#: common/setting/system.py:251 +#: common/setting/system.py:264 msgid "Select base currency for pricing calculations" msgstr "選擇價格計算的默認貨幣" -#: common/setting/system.py:257 +#: common/setting/system.py:270 msgid "Supported Currencies" msgstr "支持幣種" -#: common/setting/system.py:258 +#: common/setting/system.py:271 msgid "List of supported currency codes" msgstr "支持的貨幣代碼列表" -#: common/setting/system.py:264 +#: common/setting/system.py:277 msgid "Currency Update Interval" msgstr "貨幣更新間隔時間" -#: common/setting/system.py:265 +#: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" msgstr "檢查更新的頻率(設置為零以禁用)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:729 -#: common/setting/system.py:1130 common/setting/system.py:1146 -#: common/setting/system.py:1163 +#: common/setting/system.py:280 common/setting/system.py:320 +#: common/setting/system.py:333 common/setting/system.py:341 +#: common/setting/system.py:348 common/setting/system.py:357 +#: common/setting/system.py:366 common/setting/system.py:607 +#: common/setting/system.py:635 common/setting/system.py:742 +#: common/setting/system.py:1143 common/setting/system.py:1159 +#: common/setting/system.py:1176 msgid "days" msgstr "天" -#: common/setting/system.py:271 +#: common/setting/system.py:284 msgid "Currency Update Plugin" msgstr "幣種更新插件" -#: common/setting/system.py:272 +#: common/setting/system.py:285 msgid "Currency update plugin to use" msgstr "使用貨幣更新插件" -#: common/setting/system.py:277 +#: common/setting/system.py:290 msgid "Download from URL" msgstr "從URL下載" -#: common/setting/system.py:278 +#: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" msgstr "允許從外部 URL 下載遠程圖片和文件" -#: common/setting/system.py:283 +#: common/setting/system.py:296 msgid "Download Size Limit" msgstr "下載大小限制" -#: common/setting/system.py:284 +#: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" msgstr "遠程圖片的最大允許下載大小" -#: common/setting/system.py:290 +#: common/setting/system.py:303 msgid "User-agent used to download from URL" msgstr "用於從 URL 下載的 User-agent" -#: common/setting/system.py:292 +#: common/setting/system.py:305 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "允許覆蓋用於從外部 URL 下載圖片和文件的 user-agent(留空為默認值)" -#: common/setting/system.py:297 +#: common/setting/system.py:310 msgid "Strict URL Validation" msgstr "嚴格的 URL 驗證" -#: common/setting/system.py:298 +#: common/setting/system.py:311 msgid "Require schema specification when validating URLs" msgstr "驗證 URL 時需要 schema 規範" -#: common/setting/system.py:303 +#: common/setting/system.py:316 msgid "Update Check Interval" msgstr "更新檢查間隔" -#: common/setting/system.py:304 +#: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" msgstr "檢查更新的頻率(設置為零以禁用)" -#: common/setting/system.py:310 +#: common/setting/system.py:323 msgid "Automatic Backup" msgstr "自動備份" -#: common/setting/system.py:311 +#: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" msgstr "啟動資料庫和媒體文件自動備份" -#: common/setting/system.py:316 +#: common/setting/system.py:329 msgid "Auto Backup Interval" msgstr "自動備份間隔" -#: common/setting/system.py:317 +#: common/setting/system.py:330 msgid "Specify number of days between automated backup events" msgstr "指定自動備份之間的間隔天數" -#: common/setting/system.py:323 +#: common/setting/system.py:336 msgid "Task Deletion Interval" msgstr "任務刪除間隔" -#: common/setting/system.py:325 +#: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" msgstr "後台任務結果將在指定天數後刪除" -#: common/setting/system.py:332 +#: common/setting/system.py:345 msgid "Error Log Deletion Interval" msgstr "錯誤日誌刪除間隔" -#: common/setting/system.py:333 +#: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" msgstr "錯誤日誌將在指定天數後被刪除" -#: common/setting/system.py:339 +#: common/setting/system.py:352 msgid "Notification Deletion Interval" msgstr "通知刪除間隔" -#: common/setting/system.py:341 +#: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" msgstr "用户通知將在指定天數後被刪除" -#: common/setting/system.py:348 +#: common/setting/system.py:361 msgid "Email Deletion Interval" msgstr "電子郵件刪除間隔" -#: common/setting/system.py:350 +#: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" msgstr "電子郵件訊息將在指定天數後刪除" -#: common/setting/system.py:357 +#: common/setting/system.py:370 msgid "Protect Email Log" msgstr "保護電子郵件日誌" -#: common/setting/system.py:358 +#: common/setting/system.py:371 msgid "Prevent deletion of email log entries" msgstr "防止刪除電子郵件日誌紀錄" -#: common/setting/system.py:363 +#: common/setting/system.py:376 msgid "Barcode Support" msgstr "條形碼支持" -#: common/setting/system.py:364 +#: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" msgstr "在網頁界面啓用條形碼掃描器支持" -#: common/setting/system.py:369 +#: common/setting/system.py:382 msgid "Store Barcode Results" msgstr "存儲條碼結果" -#: common/setting/system.py:370 +#: common/setting/system.py:383 msgid "Store barcode scan results in the database" msgstr "存儲條碼掃描結果" -#: common/setting/system.py:375 +#: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" msgstr "條碼掃描最大計數" -#: common/setting/system.py:376 +#: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" msgstr "存儲條碼掃描結果的最大數量" -#: common/setting/system.py:381 +#: common/setting/system.py:394 msgid "Barcode Input Delay" msgstr "條形碼掃描延遲設置" -#: common/setting/system.py:382 +#: common/setting/system.py:395 msgid "Barcode input processing delay time" msgstr "條形碼輸入處理延遲時間" -#: common/setting/system.py:388 +#: common/setting/system.py:401 msgid "Barcode Webcam Support" msgstr "條碼攝像頭支持" -#: common/setting/system.py:389 +#: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" msgstr "允許通過網絡攝像頭掃描條形碼" -#: common/setting/system.py:394 +#: common/setting/system.py:407 msgid "Barcode Show Data" msgstr "條形碼顯示數據" -#: common/setting/system.py:395 +#: common/setting/system.py:408 msgid "Display barcode data in browser as text" msgstr "在瀏覽器中將條形碼數據顯示為文本" -#: common/setting/system.py:400 +#: common/setting/system.py:413 msgid "Barcode Generation Plugin" msgstr "條形碼生成插件" -#: common/setting/system.py:401 +#: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" msgstr "用於內部條形碼數據生成的插件" -#: common/setting/system.py:406 +#: common/setting/system.py:419 msgid "Part Revisions" msgstr "零件修訂" -#: common/setting/system.py:407 +#: common/setting/system.py:420 msgid "Enable revision field for Part" msgstr "啓用零件修訂字段" -#: common/setting/system.py:412 +#: common/setting/system.py:425 msgid "Assembly Revision Only" msgstr "僅限裝配修訂版本" -#: common/setting/system.py:413 +#: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" msgstr "僅允許對裝配零件進行修訂" -#: common/setting/system.py:418 +#: common/setting/system.py:431 msgid "Allow Deletion from Assembly" msgstr "允許從裝配中刪除" -#: common/setting/system.py:419 +#: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" msgstr "允許刪除已在裝配中使用的零件" -#: common/setting/system.py:424 +#: common/setting/system.py:437 msgid "IPN Regex" msgstr "IPN 內部零件號" -#: common/setting/system.py:425 +#: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" msgstr "匹配零件 IPN(內部零件號)的正則表達式模式" -#: common/setting/system.py:428 +#: common/setting/system.py:441 msgid "Allow Duplicate IPN" msgstr "允許重複的 IPN(內部零件號)" -#: common/setting/system.py:429 +#: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" msgstr "允許多個零件共享相同的 IPN(內部零件號)" -#: common/setting/system.py:434 +#: common/setting/system.py:447 msgid "Allow Editing IPN" msgstr "允許編輯 IPN(內部零件號)" -#: common/setting/system.py:435 +#: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" msgstr "允許編輯零件時更改內部零件號" -#: common/setting/system.py:440 +#: common/setting/system.py:453 msgid "Copy Part BOM Data" msgstr "複製零件物料清單數據" -#: common/setting/system.py:441 +#: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" msgstr "複製零件時默認複製物料清單數據" -#: common/setting/system.py:446 +#: common/setting/system.py:459 msgid "Copy Part Parameter Data" msgstr "複製零件參數數據" -#: common/setting/system.py:447 +#: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" msgstr "複製零件時默認複製參數數據" -#: common/setting/system.py:452 +#: common/setting/system.py:465 msgid "Copy Part Test Data" msgstr "複製零件測試數據" -#: common/setting/system.py:453 +#: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" msgstr "複製零件時默認複製測試數據" -#: common/setting/system.py:458 +#: common/setting/system.py:471 msgid "Copy Category Parameter Templates" msgstr "複製類別參數模板" -#: common/setting/system.py:459 +#: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" msgstr "創建零件時複製類別參數模板" -#: common/setting/system.py:465 +#: common/setting/system.py:478 msgid "Parts are templates by default" msgstr "零件默認為模板" -#: common/setting/system.py:471 +#: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" msgstr "默認情況下,元件可由其他零件組裝而成" -#: common/setting/system.py:476 part/models.py:1253 part/serializers.py:1724 -#: part/serializers.py:1731 +#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 +#: part/serializers.py:1771 msgid "Component" msgstr "組件" -#: common/setting/system.py:477 +#: common/setting/system.py:490 msgid "Parts can be used as sub-components by default" msgstr "默認情況下,零件可用作子部件" -#: common/setting/system.py:482 part/models.py:1271 +#: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" msgstr "可購買" -#: common/setting/system.py:483 +#: common/setting/system.py:496 msgid "Parts are purchaseable by default" msgstr "默認情況下可購買零件" -#: common/setting/system.py:488 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "可銷售" -#: common/setting/system.py:489 +#: common/setting/system.py:502 msgid "Parts are salable by default" msgstr "零件默認為可銷售" -#: common/setting/system.py:495 +#: common/setting/system.py:508 msgid "Parts are trackable by default" msgstr "默認情況下可跟蹤零件" -#: common/setting/system.py:500 part/models.py:1293 +#: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" msgstr "虛擬的" -#: common/setting/system.py:501 +#: common/setting/system.py:514 msgid "Parts are virtual by default" msgstr "默認情況下,零件是虛擬的" -#: common/setting/system.py:506 +#: common/setting/system.py:519 msgid "Show related parts" msgstr "顯示相關零件" -#: common/setting/system.py:507 +#: common/setting/system.py:520 msgid "Display related parts for a part" msgstr "顯示零件的相關零件" -#: common/setting/system.py:512 +#: common/setting/system.py:525 msgid "Initial Stock Data" msgstr "初始庫存數據" -#: common/setting/system.py:513 +#: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" msgstr "允許在添加新零件時創建初始庫存" -#: common/setting/system.py:518 +#: common/setting/system.py:531 msgid "Initial Supplier Data" msgstr "初始供應商數據" -#: common/setting/system.py:520 +#: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" msgstr "允許在添加新零件時創建初始供應商數據" -#: common/setting/system.py:526 +#: common/setting/system.py:539 msgid "Part Name Display Format" msgstr "零件名稱顯示格式" -#: common/setting/system.py:527 +#: common/setting/system.py:540 msgid "Format to display the part name" msgstr "顯示零件名稱的格式" -#: common/setting/system.py:533 +#: common/setting/system.py:546 msgid "Part Category Default Icon" msgstr "零件類別默認圖標" -#: common/setting/system.py:534 +#: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" msgstr "零件類別默認圖標 (空表示沒有圖標)" -#: common/setting/system.py:539 +#: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" msgstr "最小定價小數位數" -#: common/setting/system.py:541 +#: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "呈現定價數據時顯示的最小小數位數" -#: common/setting/system.py:552 +#: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" msgstr "最大定價小數位數" -#: common/setting/system.py:554 +#: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "呈現定價數據時顯示的最大小數位數" -#: common/setting/system.py:565 +#: common/setting/system.py:578 msgid "Use Supplier Pricing" msgstr "使用供應商定價" -#: common/setting/system.py:567 +#: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" msgstr "將供應商的價批發價納入總體定價計算中" -#: common/setting/system.py:573 +#: common/setting/system.py:586 msgid "Purchase History Override" msgstr "購買歷史記錄覆蓋" -#: common/setting/system.py:575 +#: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "歷史採購訂單定價優先於供應商批發價" -#: common/setting/system.py:581 +#: common/setting/system.py:594 msgid "Use Stock Item Pricing" msgstr "使用庫存項定價" -#: common/setting/system.py:583 +#: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "使用手動輸入的庫存數據進行定價計算" -#: common/setting/system.py:589 +#: common/setting/system.py:602 msgid "Stock Item Pricing Age" msgstr "庫存項目定價時間" -#: common/setting/system.py:591 +#: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "從定價計算中排除超過此天數的庫存項目" -#: common/setting/system.py:598 +#: common/setting/system.py:611 msgid "Use Variant Pricing" msgstr "使用變體定價" -#: common/setting/system.py:599 +#: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" msgstr "在整體定價計算中包括變體定價" -#: common/setting/system.py:604 +#: common/setting/system.py:617 msgid "Active Variants Only" msgstr "僅限活躍變體" -#: common/setting/system.py:606 +#: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" msgstr "僅使用活躍變體零件計算變體價格" -#: common/setting/system.py:612 +#: common/setting/system.py:625 msgid "Auto Update Pricing" msgstr "自動更新定價" -#: common/setting/system.py:614 +#: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" msgstr "當內部資料變更時自動更新零件定價" -#: common/setting/system.py:620 +#: common/setting/system.py:633 msgid "Pricing Rebuild Interval" msgstr "價格重建間隔" -#: common/setting/system.py:621 +#: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" msgstr "零件價格自動更新前的天數" -#: common/setting/system.py:627 +#: common/setting/system.py:640 msgid "Internal Prices" msgstr "內部價格" -#: common/setting/system.py:628 +#: common/setting/system.py:641 msgid "Enable internal prices for parts" msgstr "啓用內部零件價格" -#: common/setting/system.py:633 +#: common/setting/system.py:646 msgid "Internal Price Override" msgstr "覆蓋內部價格" -#: common/setting/system.py:635 +#: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" msgstr "如果有內部價格,內部價格將覆蓋價格範圍計算" -#: common/setting/system.py:641 +#: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:643 +#: common/setting/system.py:656 msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:662 msgid "Enable label printing" msgstr "啓用標籤打印功能" -#: common/setting/system.py:650 +#: common/setting/system.py:663 msgid "Enable label printing from the web interface" msgstr "啓用從網絡界面打印標籤" -#: common/setting/system.py:655 +#: common/setting/system.py:668 msgid "Label Image DPI" msgstr "標籤圖片 DPI" -#: common/setting/system.py:657 +#: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "生成圖像文件以供標籤打印插件使用時的 DPI 分辨率" -#: common/setting/system.py:663 +#: common/setting/system.py:676 msgid "Enable Reports" msgstr "啓用報告" -#: common/setting/system.py:664 +#: common/setting/system.py:677 msgid "Enable generation of reports" msgstr "啓用報告生成" -#: common/setting/system.py:669 +#: common/setting/system.py:682 msgid "Debug Mode" msgstr "調試模式" -#: common/setting/system.py:670 +#: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" msgstr "以調試模式生成報告(HTML 輸出)" -#: common/setting/system.py:675 +#: common/setting/system.py:688 msgid "Log Report Errors" msgstr "日誌錯誤報告" -#: common/setting/system.py:676 +#: common/setting/system.py:689 msgid "Log errors which occur when generating reports" msgstr "記錄生成報告時出現的錯誤" -#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:381 +#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:384 msgid "Page Size" msgstr "頁面大小" -#: common/setting/system.py:682 +#: common/setting/system.py:695 msgid "Default page size for PDF reports" msgstr "PDF 報告默認頁面大小" -#: common/setting/system.py:687 +#: common/setting/system.py:700 msgid "Enforce Parameter Units" msgstr "強制參數單位" -#: common/setting/system.py:689 +#: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" msgstr "如果提供了單位,參數值必須與指定的單位匹配" -#: common/setting/system.py:695 +#: common/setting/system.py:708 msgid "Globally Unique Serials" msgstr "全局唯一序列號" -#: common/setting/system.py:696 +#: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" msgstr "庫存項的序列號必須全局唯一" -#: common/setting/system.py:701 +#: common/setting/system.py:714 msgid "Delete Depleted Stock" msgstr "刪除已耗盡的庫存" -#: common/setting/system.py:702 +#: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" msgstr "設置庫存耗盡時的默認行為" -#: common/setting/system.py:707 +#: common/setting/system.py:720 msgid "Batch Code Template" msgstr "批號模板" -#: common/setting/system.py:708 +#: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" msgstr "為庫存項生成默認批號的模板" -#: common/setting/system.py:712 +#: common/setting/system.py:725 msgid "Stock Expiry" msgstr "庫存過期" -#: common/setting/system.py:713 +#: common/setting/system.py:726 msgid "Enable stock expiry functionality" msgstr "啓用庫存過期功能" -#: common/setting/system.py:718 +#: common/setting/system.py:731 msgid "Sell Expired Stock" msgstr "銷售過期庫存" -#: common/setting/system.py:719 +#: common/setting/system.py:732 msgid "Allow sale of expired stock" msgstr "允許銷售過期庫存" -#: common/setting/system.py:724 +#: common/setting/system.py:737 msgid "Stock Stale Time" msgstr "庫存過期時間" -#: common/setting/system.py:726 +#: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" msgstr "庫存項在到期前被視為過期的天數" -#: common/setting/system.py:733 +#: common/setting/system.py:746 msgid "Build Expired Stock" msgstr "生產過期庫存" -#: common/setting/system.py:734 +#: common/setting/system.py:747 msgid "Allow building with expired stock" msgstr "允許用過期的庫存生產" -#: common/setting/system.py:739 +#: common/setting/system.py:752 msgid "Stock Ownership Control" msgstr "庫存所有權控制" -#: common/setting/system.py:740 +#: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" msgstr "啓用庫存地點和項目的所有權控制" -#: common/setting/system.py:745 +#: common/setting/system.py:758 msgid "Stock Location Default Icon" msgstr "庫存地點默認圖標" -#: common/setting/system.py:746 +#: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" msgstr "庫存地點默認圖標 (空表示沒有圖標)" -#: common/setting/system.py:751 +#: common/setting/system.py:764 msgid "Show Installed Stock Items" msgstr "顯示已安裝的庫存項" -#: common/setting/system.py:752 +#: common/setting/system.py:765 msgid "Display installed stock items in stock tables" msgstr "在庫存表中顯示已安裝的庫存項" -#: common/setting/system.py:757 +#: common/setting/system.py:770 msgid "Check BOM when installing items" msgstr "在安裝項目時檢查物料清單" -#: common/setting/system.py:759 +#: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "已安裝的庫存項目必須存在於上級零件的物料清單中" -#: common/setting/system.py:765 +#: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" msgstr "允許超出庫存轉移" -#: common/setting/system.py:767 +#: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "允許非庫存的庫存項目在庫存位置之間轉移" -#: common/setting/system.py:773 +#: common/setting/system.py:786 msgid "Build Order Reference Pattern" msgstr "生產訂單參考模式" -#: common/setting/system.py:774 +#: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" msgstr "生成生產訂單參考字段所需的模式" -#: common/setting/system.py:779 common/setting/system.py:839 -#: common/setting/system.py:859 common/setting/system.py:903 +#: common/setting/system.py:792 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:916 msgid "Require Responsible Owner" msgstr "要求負責人" -#: common/setting/system.py:780 common/setting/system.py:840 -#: common/setting/system.py:860 common/setting/system.py:904 +#: common/setting/system.py:793 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:917 msgid "A responsible owner must be assigned to each order" msgstr "必須為每個訂單分配一個負責人" -#: common/setting/system.py:785 +#: common/setting/system.py:798 msgid "Require Active Part" msgstr "需要活動零件" -#: common/setting/system.py:786 +#: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" msgstr "防止為非活動零件創建生產訂單" -#: common/setting/system.py:791 +#: common/setting/system.py:804 msgid "Require Locked Part" msgstr "需要鎖定零件" -#: common/setting/system.py:792 +#: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" msgstr "防止為未鎖定的零件創建生產訂單" -#: common/setting/system.py:797 +#: common/setting/system.py:810 msgid "Require Valid BOM" msgstr "需要有效的物料清單" -#: common/setting/system.py:798 +#: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" msgstr "除非物料清單已驗證,否則禁止創建生產訂單" -#: common/setting/system.py:803 +#: common/setting/system.py:816 msgid "Require Closed Child Orders" msgstr "需要關閉子訂單" -#: common/setting/system.py:805 +#: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" msgstr "在所有子訂單關閉之前,阻止生產訂單的完成" -#: common/setting/system.py:811 +#: common/setting/system.py:824 msgid "External Build Orders" msgstr "外部生產工單" -#: common/setting/system.py:812 +#: common/setting/system.py:825 msgid "Enable external build order functionality" msgstr "啟用外部生產工單功能" -#: common/setting/system.py:817 +#: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "阻止直到測試通過" -#: common/setting/system.py:819 +#: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "在所有必要的測試通過之前,阻止產出完成" -#: common/setting/system.py:825 +#: common/setting/system.py:838 msgid "Enable Return Orders" msgstr "啓用訂單退貨" -#: common/setting/system.py:826 +#: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" msgstr "在用户界面中啓用訂單退貨功能" -#: common/setting/system.py:831 +#: common/setting/system.py:844 msgid "Return Order Reference Pattern" msgstr "退貨訂單參考模式" -#: common/setting/system.py:833 +#: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" msgstr "生成退貨訂單參考字段所需的模式" -#: common/setting/system.py:845 +#: common/setting/system.py:858 msgid "Edit Completed Return Orders" msgstr "編輯已完成的退貨訂單" -#: common/setting/system.py:847 +#: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" msgstr "允許編輯已完成的退貨訂單" -#: common/setting/system.py:853 +#: common/setting/system.py:866 msgid "Sales Order Reference Pattern" msgstr "銷售訂單參考模式" -#: common/setting/system.py:854 +#: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" msgstr "生成銷售訂單參考字段所需參照模式" -#: common/setting/system.py:865 +#: common/setting/system.py:878 msgid "Sales Order Default Shipment" msgstr "銷售訂單默認配送方式" -#: common/setting/system.py:866 +#: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" msgstr "啓用創建銷售訂單的默認配送功能" -#: common/setting/system.py:871 +#: common/setting/system.py:884 msgid "Edit Completed Sales Orders" msgstr "編輯已完成的銷售訂單" -#: common/setting/system.py:873 +#: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "允許在訂單配送或完成後編輯銷售訂單" -#: common/setting/system.py:879 +#: common/setting/system.py:892 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" msgstr "標記該訂單為已完成?" -#: common/setting/system.py:889 +#: common/setting/system.py:902 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "標記為已發貨的銷售訂單將自動完成,繞過“已發貨”狀態" -#: common/setting/system.py:895 +#: common/setting/system.py:908 msgid "Purchase Order Reference Pattern" msgstr "採購訂單參考模式" -#: common/setting/system.py:897 +#: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" msgstr "生成採購訂單參考字段所需的模式" -#: common/setting/system.py:909 +#: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" msgstr "編輯已完成的採購訂單" -#: common/setting/system.py:911 +#: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "允許在採購訂單已配送或完成後編輯訂單" -#: common/setting/system.py:917 +#: common/setting/system.py:930 msgid "Convert Currency" msgstr "轉換幣別" -#: common/setting/system.py:918 +#: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" msgstr "收貨時將項目價值換算為基準幣別" -#: common/setting/system.py:923 +#: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" msgstr "自動完成採購訂單" -#: common/setting/system.py:925 +#: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "當收到所有行項目時,自動將採購訂單標記為完成" -#: common/setting/system.py:932 +#: common/setting/system.py:945 msgid "Enable password forgot" msgstr "忘記啓用密碼" -#: common/setting/system.py:933 +#: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" msgstr "在登錄頁面上啓用忘記密碼功能" -#: common/setting/system.py:938 +#: common/setting/system.py:951 msgid "Enable registration" msgstr "啓用註冊" -#: common/setting/system.py:939 +#: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" msgstr "在登錄頁面為用户啓用自行註冊功能" -#: common/setting/system.py:944 +#: common/setting/system.py:957 msgid "Enable SSO" msgstr "啓用單點登錄" -#: common/setting/system.py:945 +#: common/setting/system.py:958 msgid "Enable SSO on the login pages" msgstr "在登錄界面啓用單點登錄" -#: common/setting/system.py:950 +#: common/setting/system.py:963 msgid "Enable SSO registration" msgstr "啓用單點登錄註冊" -#: common/setting/system.py:952 +#: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" msgstr "允許登錄頁面上的用户通過 SSO 進行自我註冊" -#: common/setting/system.py:958 +#: common/setting/system.py:971 msgid "Enable SSO group sync" msgstr "啓用單點登錄羣組同步" -#: common/setting/system.py:960 +#: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "啓用庫存管理系統組和由身份提供者提供的組的同步功能" -#: common/setting/system.py:966 +#: common/setting/system.py:979 msgid "SSO group key" msgstr "單點登錄系統組密鑰" -#: common/setting/system.py:967 +#: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" msgstr "由身份提供者提供的組聲明屬性名稱" -#: common/setting/system.py:972 +#: common/setting/system.py:985 msgid "SSO group map" msgstr "單點登錄系統組地圖" -#: common/setting/system.py:974 +#: common/setting/system.py:987 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "從單點登錄系統組組到本地庫存管理系統組的映射。如果本地組不存在,它將被創建。" -#: common/setting/system.py:980 +#: common/setting/system.py:993 msgid "Remove groups outside of SSO" msgstr "移除單點登錄系統以外的羣組" -#: common/setting/system.py:982 +#: common/setting/system.py:995 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "如果分配給用户的組不是身份提供者的後端,是否應該刪除它們。禁用此設置可能會造成安全問題" -#: common/setting/system.py:988 +#: common/setting/system.py:1001 msgid "Email required" msgstr "需要郵箱地址" -#: common/setting/system.py:989 +#: common/setting/system.py:1002 msgid "Require user to supply mail on signup" msgstr "要求用户在註冊時提供郵件" -#: common/setting/system.py:994 +#: common/setting/system.py:1007 msgid "Auto-fill SSO users" msgstr "自動填充單點登錄系統用户" -#: common/setting/system.py:995 +#: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" msgstr "自動使用單點登錄系統賬户的數據填寫用户詳細信息" -#: common/setting/system.py:1000 +#: common/setting/system.py:1013 msgid "Mail twice" msgstr "發兩次郵件" -#: common/setting/system.py:1001 +#: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" msgstr "註冊時詢問用户他們的電子郵件兩次" -#: common/setting/system.py:1006 +#: common/setting/system.py:1019 msgid "Password twice" msgstr "兩次輸入密碼" -#: common/setting/system.py:1007 +#: common/setting/system.py:1020 msgid "On signup ask users twice for their password" msgstr "當註冊時請用户輸入密碼兩次" -#: common/setting/system.py:1012 +#: common/setting/system.py:1025 msgid "Allowed domains" msgstr "域名白名單" -#: common/setting/system.py:1014 +#: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "限制註冊到某些域名 (逗號分隔,以 @ 開頭)" -#: common/setting/system.py:1020 +#: common/setting/system.py:1033 msgid "Group on signup" msgstr "註冊羣組" -#: common/setting/system.py:1022 +#: common/setting/system.py:1035 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "註冊時分配給新用户的組。 如果啓用了單點登錄系統羣組同步,此羣組僅在無法從 IdP 分配任何羣組的情況下才被設置。" -#: common/setting/system.py:1028 +#: common/setting/system.py:1041 msgid "Enforce MFA" msgstr "強制啓用多因素安全認證" -#: common/setting/system.py:1029 +#: common/setting/system.py:1042 msgid "Users must use multifactor security." msgstr "用户必須使用多因素安全認證。" -#: common/setting/system.py:1034 +#: common/setting/system.py:1047 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1039 +#: common/setting/system.py:1052 msgid "Check plugins on startup" msgstr "啓動時檢查插件" -#: common/setting/system.py:1041 +#: common/setting/system.py:1054 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "啓動時檢查全部插件是否已安裝 - 在容器環境中啓用" -#: common/setting/system.py:1048 +#: common/setting/system.py:1061 msgid "Check for plugin updates" msgstr "檢查插件更新" -#: common/setting/system.py:1049 +#: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" msgstr "啓用定期檢查已安裝插件的更新" -#: common/setting/system.py:1055 +#: common/setting/system.py:1068 msgid "Enable URL integration" msgstr "啓用統一資源定位符集成" -#: common/setting/system.py:1056 +#: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" msgstr "啓用插件以添加統一資源定位符路由" -#: common/setting/system.py:1062 +#: common/setting/system.py:1075 msgid "Enable navigation integration" msgstr "啓用導航集成" -#: common/setting/system.py:1063 +#: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" msgstr "啓用插件以集成到導航中" -#: common/setting/system.py:1069 +#: common/setting/system.py:1082 msgid "Enable app integration" msgstr "啓用應用集成" -#: common/setting/system.py:1070 +#: common/setting/system.py:1083 msgid "Enable plugins to add apps" msgstr "啓用插件添加應用" -#: common/setting/system.py:1076 +#: common/setting/system.py:1089 msgid "Enable schedule integration" msgstr "啓用調度集成" -#: common/setting/system.py:1077 +#: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" msgstr "啓用插件來運行預定任務" -#: common/setting/system.py:1083 +#: common/setting/system.py:1096 msgid "Enable event integration" msgstr "啓用事件集成" -#: common/setting/system.py:1084 +#: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" msgstr "啓用插件響應內部事件" -#: common/setting/system.py:1090 +#: common/setting/system.py:1103 msgid "Enable interface integration" msgstr "啓用界面集成" -#: common/setting/system.py:1091 +#: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" msgstr "啓用插件集成到用户界面" -#: common/setting/system.py:1097 +#: common/setting/system.py:1110 msgid "Enable mail integration" msgstr "啟用郵件整合" -#: common/setting/system.py:1098 +#: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" msgstr "允許模組處理寄出/接收郵件" -#: common/setting/system.py:1104 +#: common/setting/system.py:1117 msgid "Enable project codes" msgstr "啟用專案代碼" -#: common/setting/system.py:1105 +#: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" msgstr "啟用專案代碼以追蹤專案" -#: common/setting/system.py:1110 +#: common/setting/system.py:1123 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" msgstr "啟用記錄庫存數量及價值歷史的功能" -#: common/setting/system.py:1118 +#: common/setting/system.py:1131 msgid "Exclude External Locations" msgstr "排除外部地點" -#: common/setting/system.py:1120 +#: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1126 +#: common/setting/system.py:1139 msgid "Automatic Stocktake Period" msgstr "自動盤點週期" -#: common/setting/system.py:1127 +#: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1141 +#: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1143 +#: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" msgstr "刪除舊庫存的追蹤紀錄" -#: common/setting/system.py:1152 +#: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1158 +#: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1167 +#: common/setting/system.py:1180 msgid "Display Users full names" msgstr "顯示用户全名" -#: common/setting/system.py:1168 +#: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" msgstr "顯示用户全名而不是用户名" -#: common/setting/system.py:1173 +#: common/setting/system.py:1186 msgid "Display User Profiles" msgstr "顯示使用者個人檔案" -#: common/setting/system.py:1174 +#: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" msgstr "在個人頁面顯示使用者檔案資訊" -#: common/setting/system.py:1179 +#: common/setting/system.py:1192 msgid "Enable Test Station Data" msgstr "啓用測試站數據" -#: common/setting/system.py:1180 +#: common/setting/system.py:1193 msgid "Enable test station data collection for test results" msgstr "啓用測試站數據收集以獲取測試結果" -#: common/setting/system.py:1185 +#: common/setting/system.py:1198 msgid "Enable Machine Ping" msgstr "啟用設備 Ping" -#: common/setting/system.py:1187 +#: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3956,33 +3988,33 @@ msgstr "零件已激活" msgid "Manufacturer is Active" msgstr "製造商處於活動狀態" -#: company/api.py:250 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "供應商零件處於激活狀態" -#: company/api.py:252 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "內部零件已激活" -#: company/api.py:261 +#: company/api.py:263 msgid "Supplier is Active" msgstr "供應商已激活" -#: company/api.py:273 company/models.py:535 company/serializers.py:455 -#: part/serializers.py:488 +#: company/api.py:275 company/models.py:535 company/serializers.py:473 +#: part/serializers.py:491 msgid "Manufacturer" msgstr "製造商" -#: company/api.py:280 company/models.py:124 company/models.py:404 +#: company/api.py:282 company/models.py:124 company/models.py:404 #: stock/api.py:899 msgid "Company" msgstr "公司" -#: company/api.py:290 +#: company/api.py:292 msgid "Has Stock" msgstr "有庫存" @@ -4071,7 +4103,7 @@ msgstr "稅籍編號" msgid "Company Tax ID" msgstr "公司稅籍編號" -#: company/models.py:350 order/models.py:535 order/models.py:2318 +#: company/models.py:350 order/models.py:535 order/models.py:2340 msgid "Address" msgstr "地址" @@ -4163,7 +4195,7 @@ msgstr "內部使用的裝運通知單" msgid "Link to address information (external)" msgstr "鏈接地址信息 (外部)" -#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: company/models.py:507 company/models.py:802 company/serializers.py:501 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "製造商零件" @@ -4181,12 +4213,12 @@ msgstr "選擇零件" msgid "Select manufacturer" msgstr "選擇製造商" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 -#: part/serializers.py:498 +#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 +#: part/serializers.py:501 msgid "MPN" msgstr "製造商零件編號" -#: company/models.py:543 stock/serializers.py:575 +#: company/models.py:543 stock/serializers.py:578 msgid "Manufacturer Part Number" msgstr "製造商零件編號" @@ -4210,8 +4242,8 @@ msgstr "包裝單位必須大於零" msgid "Linked manufacturer part must reference the same base part" msgstr "鏈接的製造商零件必須引用相同的基礎零件" -#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:653 part/serializers.py:472 +#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 +#: order/models.py:666 part/serializers.py:475 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 #: stock/api.py:566 templates/email/overdue_purchase_order.html:16 @@ -4222,7 +4254,7 @@ msgstr "供應商" msgid "Select supplier" msgstr "選擇供應商" -#: company/models.py:781 part/serializers.py:483 +#: company/models.py:781 part/serializers.py:486 msgid "Supplier stock keeping unit" msgstr "供應商庫存管理單位" @@ -4258,8 +4290,8 @@ msgstr "基本費用" msgid "Minimum charge (e.g. stocking fee)" msgstr "最低費用(例如庫存費)" -#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 -#: stock/serializers.py:1648 +#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: stock/serializers.py:1681 msgid "Packaging" msgstr "打包" @@ -4307,14 +4339,18 @@ msgstr "此供應商使用的默認貨幣" msgid "Company Name" msgstr "公司名稱" -#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 +#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 msgid "In Stock" msgstr "有庫存" -#: company/serializers.py:424 +#: company/serializers.py:435 msgid "Price Breaks" msgstr "" +#: company/serializers.py:488 +msgid "Pretty Name" +msgstr "" + #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "資料匯出過程發生錯誤" @@ -4419,67 +4455,67 @@ msgstr "ID" msgid "Existing database identifier for the record" msgstr "資料庫中既有紀錄的識別碼" -#: importer/models.py:452 +#: importer/models.py:459 msgid "Column is already mapped to a database field" msgstr "列已映射到數據庫字段" -#: importer/models.py:457 +#: importer/models.py:464 msgid "Field is already mapped to a data column" msgstr "字段已映射到數據列" -#: importer/models.py:466 +#: importer/models.py:473 msgid "Column mapping must be linked to a valid import session" msgstr "列映射必須鏈接到有效的導入會話" -#: importer/models.py:471 +#: importer/models.py:478 msgid "Column does not exist in the data file" msgstr "數據文件中不存在列" -#: importer/models.py:478 +#: importer/models.py:485 msgid "Field does not exist in the target model" msgstr "目標模型中不存在字段" -#: importer/models.py:482 +#: importer/models.py:489 msgid "Selected field is read-only" msgstr "所選字段為只讀" -#: importer/models.py:487 importer/models.py:564 +#: importer/models.py:494 importer/models.py:571 msgid "Import Session" msgstr "導入會話" -#: importer/models.py:491 +#: importer/models.py:498 msgid "Field" msgstr "字段" -#: importer/models.py:493 +#: importer/models.py:500 msgid "Column" msgstr "列" -#: importer/models.py:568 +#: importer/models.py:575 msgid "Row Index" msgstr "行索引" -#: importer/models.py:571 +#: importer/models.py:578 msgid "Original row data" msgstr "原始行數據" -#: importer/models.py:576 machine/models.py:111 +#: importer/models.py:583 machine/models.py:111 msgid "Errors" msgstr "錯誤" -#: importer/models.py:578 part/serializers.py:1132 +#: importer/models.py:585 part/serializers.py:1159 msgid "Valid" msgstr "有效" -#: importer/models.py:839 +#: importer/models.py:846 msgid "ID is required for updating existing records." msgstr "更新既有紀錄需要提供 ID。" -#: importer/models.py:846 +#: importer/models.py:853 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:852 +#: importer/models.py:859 msgid "Invalid ID format provided" msgstr "" @@ -4579,7 +4615,7 @@ msgstr "每個標籤要打印的份數" msgid "Connected" msgstr "已連接" -#: machine/machine_types/label_printer.py:232 order/api.py:1840 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "未知" @@ -4711,7 +4747,7 @@ msgstr "" msgid "Order Reference" msgstr "訂單參考" -#: order/api.py:156 order/api.py:1214 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "未完成" @@ -4767,11 +4803,11 @@ msgstr "更新之後" msgid "Has Pricing" msgstr "有定價" -#: order/api.py:338 order/api.py:823 order/api.py:1523 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "完成時間早於" -#: order/api.py:342 order/api.py:827 order/api.py:1527 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "完成時間晚於" @@ -4779,17 +4815,17 @@ msgstr "完成時間晚於" msgid "External Build Order" msgstr "外部生產工單" -#: order/api.py:537 order/api.py:923 order/api.py:1177 order/models.py:1950 -#: order/models.py:2076 order/models.py:2128 order/models.py:2309 -#: order/models.py:2498 order/models.py:3027 order/models.py:3093 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 +#: order/models.py:2098 order/models.py:2150 order/models.py:2331 +#: order/models.py:2527 order/models.py:3056 order/models.py:3122 msgid "Order" msgstr "訂單" -#: order/api.py:541 order/api.py:991 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "訂單完成" -#: order/api.py:573 order/api.py:577 order/serializers.py:714 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "內部零件" @@ -4797,27 +4833,27 @@ msgstr "內部零件" msgid "Order Pending" msgstr "訂單待定" -#: order/api.py:976 +#: order/api.py:978 msgid "Completed" msgstr "已完成" -#: order/api.py:1230 +#: order/api.py:1234 msgid "Has Shipment" msgstr "已出貨" -#: order/api.py:1438 +#: order/api.py:1442 msgid "Shipment not found" msgstr "" -#: order/api.py:1834 order/models.py:564 order/models.py:1951 -#: order/models.py:2077 +#: order/api.py:1840 order/models.py:577 order/models.py:1973 +#: order/models.py:2099 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "採購訂單" -#: order/api.py:1836 order/models.py:1275 order/models.py:2129 -#: order/models.py:2310 order/models.py:2499 +#: order/api.py:1842 order/models.py:1288 order/models.py:2151 +#: order/models.py:2332 order/models.py:2528 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4825,8 +4861,8 @@ msgstr "採購訂單" msgid "Sales Order" msgstr "銷售訂單" -#: order/api.py:1838 order/models.py:2670 order/models.py:3028 -#: order/models.py:3094 +#: order/api.py:1844 order/models.py:2699 order/models.py:3057 +#: order/models.py:3123 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4870,11 +4906,11 @@ msgstr "地址不符合選定的公司" msgid "Order description (optional)" msgstr "訂單描述 (可選)" -#: order/models.py:457 order/models.py:1832 +#: order/models.py:457 order/models.py:1854 msgid "Select project code for this order" msgstr "為此訂單選擇項目編碼" -#: order/models.py:463 order/models.py:1813 order/models.py:2374 +#: order/models.py:463 order/models.py:1835 order/models.py:2396 msgid "Link to external page" msgstr "鏈接到外部頁面" @@ -4886,7 +4922,7 @@ msgstr "開始日期" msgid "Scheduled start date for this order" msgstr "此訂單的預定開始日期" -#: order/models.py:477 order/models.py:1820 order/serializers.py:294 +#: order/models.py:477 order/models.py:1842 order/serializers.py:307 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "預計日期" @@ -4919,413 +4955,421 @@ msgstr "此訂單的聯繫人" msgid "Company address for this order" msgstr "此訂單的公司地址" -#: order/models.py:629 order/models.py:1338 +#: order/models.py:642 order/models.py:1351 msgid "Order reference" msgstr "訂單參考" -#: order/models.py:638 order/models.py:1362 order/models.py:2760 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: order/models.py:651 order/models.py:1375 order/models.py:2789 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "狀態" -#: order/models.py:639 +#: order/models.py:652 msgid "Purchase order status" msgstr "採購訂單狀態" -#: order/models.py:654 +#: order/models.py:667 msgid "Company from which the items are being ordered" msgstr "訂購物品的公司" -#: order/models.py:665 +#: order/models.py:678 msgid "Supplier Reference" msgstr "供應商參考" -#: order/models.py:666 +#: order/models.py:679 msgid "Supplier order reference code" msgstr "供應商訂單參考代碼" -#: order/models.py:675 +#: order/models.py:688 msgid "received by" msgstr "接收人" -#: order/models.py:682 order/models.py:2775 +#: order/models.py:695 order/models.py:2804 msgid "Date order was completed" msgstr "訂單完成日期" -#: order/models.py:691 order/models.py:2009 +#: order/models.py:704 order/models.py:2031 msgid "Destination" msgstr "目的地" -#: order/models.py:692 order/models.py:2013 +#: order/models.py:705 order/models.py:2035 msgid "Destination for received items" msgstr "收到項目的存放目的地" -#: order/models.py:738 +#: order/models.py:751 msgid "Part supplier must match PO supplier" msgstr "零件供應商必須與採購訂單供應商匹配" -#: order/models.py:1008 +#: order/models.py:1021 msgid "Line item does not match purchase order" msgstr "行項目與採購訂單不匹配" -#: order/models.py:1011 +#: order/models.py:1024 msgid "Line item is missing a linked part" msgstr "行項目缺少關聯零件" -#: order/models.py:1025 +#: order/models.py:1038 msgid "Quantity must be a positive number" msgstr "數量必須是正數" -#: order/models.py:1059 +#: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1349 order/models.py:2747 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "客户" -#: order/models.py:1350 +#: order/models.py:1363 msgid "Company to which the items are being sold" msgstr "出售物品的公司" -#: order/models.py:1363 +#: order/models.py:1376 msgid "Sales order status" msgstr "銷售訂單狀態" -#: order/models.py:1374 order/models.py:2767 +#: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " msgstr "客户參考 " -#: order/models.py:1375 order/models.py:2768 +#: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" msgstr "客户訂單參考代碼" -#: order/models.py:1379 order/models.py:2326 +#: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" msgstr "發貨日期" -#: order/models.py:1388 +#: order/models.py:1401 msgid "shipped by" msgstr "發貨人" -#: order/models.py:1439 +#: order/models.py:1452 msgid "Order is already complete" msgstr "訂單已完成" -#: order/models.py:1442 +#: order/models.py:1455 msgid "Order is already cancelled" msgstr "訂單已取消" -#: order/models.py:1446 +#: order/models.py:1459 msgid "Only an open order can be marked as complete" msgstr "只有未結訂單才能標記為已完成" -#: order/models.py:1450 +#: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" msgstr "由於發貨不完整,訂單無法完成" -#: order/models.py:1455 +#: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" msgstr "訂單無法完成,因為仍有未完成的分配" -#: order/models.py:1464 +#: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" msgstr "訂單無法完成,因為行項目不完整" -#: order/models.py:1759 order/models.py:1775 +#: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" msgstr "此訂單已鎖定,無法修改" -#: order/models.py:1783 +#: order/models.py:1796 msgid "Item quantity" msgstr "項目數量" -#: order/models.py:1800 +#: order/models.py:1814 +msgid "Line Number" +msgstr "" + +#: order/models.py:1815 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1822 msgid "Line item reference" msgstr "行項目參考" -#: order/models.py:1807 +#: order/models.py:1829 msgid "Line item notes" msgstr "行項目註釋" -#: order/models.py:1822 +#: order/models.py:1844 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "此行項目的目標日期 (留空以使用訂單中的目標日期)" -#: order/models.py:1852 +#: order/models.py:1874 msgid "Line item description (optional)" msgstr "行項目描述 (可選)" -#: order/models.py:1859 +#: order/models.py:1881 msgid "Additional context for this line" msgstr "此行的附加上下文" -#: order/models.py:1869 +#: order/models.py:1891 msgid "Unit price" msgstr "單位價格" -#: order/models.py:1888 +#: order/models.py:1910 msgid "Purchase Order Line Item" msgstr "採購訂單行項目" -#: order/models.py:1917 +#: order/models.py:1939 msgid "Supplier part must match supplier" msgstr "供應商零件必須與供應商匹配" -#: order/models.py:1922 +#: order/models.py:1944 msgid "Build order must be marked as external" msgstr "生產工單必須標記為外部" -#: order/models.py:1929 +#: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" msgstr "生產工單只能連結到組裝零件" -#: order/models.py:1935 +#: order/models.py:1957 msgid "Build order part must match line item part" msgstr "生產工單的零件必須與行項目的零件一致" -#: order/models.py:1970 +#: order/models.py:1992 msgid "Supplier part" msgstr "供應商零件" -#: order/models.py:1977 +#: order/models.py:1999 msgid "Received" msgstr "已接收" -#: order/models.py:1978 +#: order/models.py:2000 msgid "Number of items received" msgstr "收到的物品數量" -#: order/models.py:1986 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "採購價格" -#: order/models.py:1987 +#: order/models.py:2009 msgid "Unit purchase price" msgstr "每單位的採購價格" -#: order/models.py:2003 +#: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" msgstr "由此行項目履行的外部生產工單" -#: order/models.py:2065 +#: order/models.py:2087 msgid "Purchase Order Extra Line" msgstr "採購訂單附加行" -#: order/models.py:2094 +#: order/models.py:2116 msgid "Sales Order Line Item" msgstr "銷售訂單行項目" -#: order/models.py:2121 +#: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" msgstr "只有可銷售的零件才能分配給銷售訂單" -#: order/models.py:2147 +#: order/models.py:2169 msgid "Sale Price" msgstr "售出價格" -#: order/models.py:2148 +#: order/models.py:2170 msgid "Unit sale price" msgstr "單位售出價格" -#: order/models.py:2157 order/status_codes.py:50 +#: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" msgstr "已配送" -#: order/models.py:2158 +#: order/models.py:2180 msgid "Shipped quantity" msgstr "發貨數量" -#: order/models.py:2270 +#: order/models.py:2292 msgid "Sales Order Shipment" msgstr "銷售訂單發貨" -#: order/models.py:2283 +#: order/models.py:2305 msgid "Shipment address must match the customer" msgstr "配送地址必須跟客戶相符" -#: order/models.py:2319 +#: order/models.py:2341 msgid "Shipping address for this shipment" msgstr "配送的採購地址" -#: order/models.py:2327 +#: order/models.py:2349 msgid "Date of shipment" msgstr "發貨日期" -#: order/models.py:2333 +#: order/models.py:2355 msgid "Delivery Date" msgstr "送達日期" -#: order/models.py:2334 +#: order/models.py:2356 msgid "Date of delivery of shipment" msgstr "裝運交貨日期" -#: order/models.py:2342 +#: order/models.py:2364 msgid "Checked By" msgstr "審核人" -#: order/models.py:2343 +#: order/models.py:2365 msgid "User who checked this shipment" msgstr "檢查此裝運的用户" -#: order/models.py:2350 order/models.py:2595 order/serializers.py:1693 -#: order/serializers.py:1817 +#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 +#: order/serializers.py:1922 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "配送" -#: order/models.py:2351 +#: order/models.py:2373 msgid "Shipment number" msgstr "配送單號" -#: order/models.py:2359 +#: order/models.py:2381 msgid "Tracking Number" msgstr "跟蹤單號" -#: order/models.py:2360 +#: order/models.py:2382 msgid "Shipment tracking information" msgstr "配送跟蹤信息" -#: order/models.py:2367 +#: order/models.py:2389 msgid "Invoice Number" msgstr "發票編號" -#: order/models.py:2368 +#: order/models.py:2390 msgid "Reference number for associated invoice" msgstr "相關發票的參考號" -#: order/models.py:2407 +#: order/models.py:2436 msgid "Shipment has already been sent" msgstr "貨物已發出" -#: order/models.py:2410 +#: order/models.py:2439 msgid "Shipment has no allocated stock items" msgstr "發貨沒有分配庫存項目" -#: order/models.py:2417 +#: order/models.py:2446 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2487 +#: order/models.py:2516 msgid "Sales Order Extra Line" msgstr "銷售訂單加行" -#: order/models.py:2516 +#: order/models.py:2545 msgid "Sales Order Allocation" msgstr "銷售訂單分配" -#: order/models.py:2539 order/models.py:2541 +#: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" msgstr "庫存項目尚未分配" -#: order/models.py:2548 +#: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" msgstr "無法將庫存項目分配給具有不同零件的行" -#: order/models.py:2551 +#: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" msgstr "無法將庫存分配給沒有零件的生產線" -#: order/models.py:2554 +#: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" msgstr "分配數量不能超過庫存數量" -#: order/models.py:2570 +#: order/models.py:2599 msgid "Allocation quantity must be greater than zero" msgstr "分配的數量必須大於零" -#: order/models.py:2573 order/serializers.py:1563 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "序列化庫存項目的數量必須為1" -#: order/models.py:2576 +#: order/models.py:2605 msgid "Sales order does not match shipment" msgstr "銷售訂單與發貨不匹配" -#: order/models.py:2577 plugin/base/barcodes/api.py:643 +#: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "發貨與銷售訂單不匹配" -#: order/models.py:2585 +#: order/models.py:2614 msgid "Line" msgstr "行" -#: order/models.py:2596 +#: order/models.py:2625 msgid "Sales order shipment reference" msgstr "銷售訂單發貨參考" -#: order/models.py:2609 order/models.py:3035 +#: order/models.py:2638 order/models.py:3064 msgid "Item" msgstr "項目" -#: order/models.py:2610 +#: order/models.py:2639 msgid "Select stock item to allocate" msgstr "選擇要分配的庫存項目" -#: order/models.py:2619 +#: order/models.py:2648 msgid "Enter stock allocation quantity" msgstr "輸入庫存分配數量" -#: order/models.py:2736 +#: order/models.py:2765 msgid "Return Order reference" msgstr "退貨訂單參考" -#: order/models.py:2748 +#: order/models.py:2777 msgid "Company from which items are being returned" msgstr "退回物品的公司" -#: order/models.py:2761 +#: order/models.py:2790 msgid "Return order status" msgstr "退貨訂單狀態" -#: order/models.py:2993 +#: order/models.py:3022 msgid "Return Order Line Item" msgstr "退貨訂單行項目" -#: order/models.py:3006 +#: order/models.py:3035 msgid "Stock item must be specified" msgstr "必須指定庫存項目" -#: order/models.py:3010 +#: order/models.py:3039 msgid "Return quantity exceeds stock quantity" msgstr "退回數量超過庫存數量" -#: order/models.py:3015 +#: order/models.py:3044 msgid "Return quantity must be greater than zero" msgstr "退回數量必須大於零" -#: order/models.py:3020 +#: order/models.py:3049 msgid "Invalid quantity for serialized stock item" msgstr "序列化庫存項目的數量無效" -#: order/models.py:3036 +#: order/models.py:3065 msgid "Select item to return from customer" msgstr "選擇要從客户處退回的商品" -#: order/models.py:3051 +#: order/models.py:3080 msgid "Received Date" msgstr "接收日期" -#: order/models.py:3052 +#: order/models.py:3081 msgid "The date this return item was received" msgstr "" -#: order/models.py:3064 +#: order/models.py:3093 msgid "Outcome" msgstr "結果" -#: order/models.py:3065 +#: order/models.py:3094 msgid "Outcome for this line item" msgstr "該行項目的結果" -#: order/models.py:3072 +#: order/models.py:3101 msgid "Cost associated with return or repair for this line item" msgstr "與此行項目的退貨或維修相關的成本" -#: order/models.py:3082 +#: order/models.py:3111 msgid "Return Order Extra Line" msgstr "退貨訂單附加行" @@ -5353,7 +5397,7 @@ msgstr "複製額外行" msgid "Copy extra line items from the original order" msgstr "從原始訂單複製額外的行項目" -#: order/serializers.py:95 part/serializers.py:413 +#: order/serializers.py:95 part/serializers.py:416 msgid "Copy Parameters" msgstr "複製參數" @@ -5372,216 +5416,216 @@ msgstr "行項目" msgid "Completed Lines" msgstr "已完成行項目" -#: order/serializers.py:172 +#: order/serializers.py:184 msgid "Duplicate Order" msgstr "複製訂單" -#: order/serializers.py:173 +#: order/serializers.py:185 msgid "Specify options for duplicating this order" msgstr "指定複製此訂單的選項" -#: order/serializers.py:252 +#: order/serializers.py:264 msgid "Invalid order ID" msgstr "訂單ID不正確" -#: order/serializers.py:430 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "供應商名稱" -#: order/serializers.py:475 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "訂單不能取消" -#: order/serializers.py:490 order/serializers.py:1584 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "允許關閉行項目不完整的訂單" -#: order/serializers.py:500 order/serializers.py:1594 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "訂單中的行項目不完整" -#: order/serializers.py:620 +#: order/serializers.py:638 msgid "Order is not open" msgstr "訂單未打開" -#: order/serializers.py:649 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "自動定價" -#: order/serializers.py:651 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "根據供應商零件數據自動計算採購價格" -#: order/serializers.py:665 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "購買價格貨幣" -#: order/serializers.py:687 +#: order/serializers.py:726 msgid "Merge Items" msgstr "合併項目" -#: order/serializers.py:689 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "將具有相同零件、目的地和目標日期的項目合併到一個行項目中" -#: order/serializers.py:696 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "庫存量單位" -#: order/serializers.py:710 part/models.py:1151 part/serializers.py:348 +#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 msgid "Internal Part Number" msgstr "內部零件編號" -#: order/serializers.py:718 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "內部零件名稱" -#: order/serializers.py:734 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "必須指定供應商零件" -#: order/serializers.py:737 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "必須指定採購訂單" -#: order/serializers.py:745 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "供應商必須匹配採購訂單" -#: order/serializers.py:746 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "採購訂單必須與供應商匹配" -#: order/serializers.py:794 order/serializers.py:1664 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "行項目" -#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2027 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "為收到的物品選擇目的地位置" -#: order/serializers.py:819 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "輸入入庫項目的批號" -#: order/serializers.py:826 stock/models.py:1167 +#: order/serializers.py:869 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "有效期至" -#: order/serializers.py:827 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "輸入入庫庫存項目的到期日" -#: order/serializers.py:835 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "輸入入庫庫存項目的序列號" -#: order/serializers.py:845 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "覆蓋傳入庫存項目的包裝資料" -#: order/serializers.py:853 order/serializers.py:2032 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "傳入庫存項目的附加説明" -#: order/serializers.py:860 +#: order/serializers.py:903 msgid "Barcode" msgstr "條形碼" -#: order/serializers.py:861 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "掃描條形碼" -#: order/serializers.py:877 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "條形碼已被使用" -#: order/serializers.py:960 order/serializers.py:2051 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "必須提供行項目" -#: order/serializers.py:979 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "必須指定目標位置" -#: order/serializers.py:986 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "提供的條形碼值必須是唯一的" -#: order/serializers.py:1107 +#: order/serializers.py:1154 msgid "Shipments" msgstr "配送紀錄" -#: order/serializers.py:1111 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "完成配送" -#: order/serializers.py:1115 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1294 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "售出價格貨幣" -#: order/serializers.py:1338 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "已分配項目" -#: order/serializers.py:1495 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "未提供裝運詳細信息" -#: order/serializers.py:1527 order/serializers.py:1673 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "行項目與此訂單不關聯" -#: order/serializers.py:1546 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "數量必須為正" -#: order/serializers.py:1683 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "輸入要分配的序列號" -#: order/serializers.py:1705 order/serializers.py:1825 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "貨物已發出" -#: order/serializers.py:1708 order/serializers.py:1828 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "發貨與此訂單無關" -#: order/serializers.py:1763 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "未找到以下序列號的匹配項" -#: order/serializers.py:1770 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "以下序列號不可用" -#: order/serializers.py:1993 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "退貨訂單行項目" -#: order/serializers.py:2003 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "行項目與退貨訂單不匹配" -#: order/serializers.py:2006 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "行項目已收到" -#: order/serializers.py:2043 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "只能根據正在進行的訂單接收物品" -#: order/serializers.py:2115 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "退回數量" -#: order/serializers.py:2132 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "行價格貨幣" @@ -5797,7 +5841,7 @@ msgstr "此類別零件的默認關鍵字" msgid "Icon" msgstr "圖標" -#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 #: stock/models.py:187 msgid "Icon (optional)" msgstr "圖標(可選)" @@ -5818,7 +5862,7 @@ msgstr "默認值" msgid "Default Parameter Value" msgstr "默認參數值" -#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28 msgid "Parts" msgstr "零件" @@ -5933,7 +5977,7 @@ msgstr "提高搜索結果可見性的零件關鍵字" msgid "Part category" msgstr "零件類別" -#: part/models.py:1150 part/serializers.py:819 +#: part/models.py:1150 part/serializers.py:831 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "內部零件號 IPN" @@ -5942,7 +5986,7 @@ msgstr "內部零件號 IPN" msgid "Part revision or version number" msgstr "零件修訂版本或版本號" -#: part/models.py:1159 report/models.py:228 +#: part/models.py:1159 report/models.py:231 msgid "Revision" msgstr "版本" @@ -5966,7 +6010,7 @@ msgstr "默認到期" msgid "Expiry time (in days) for stock items of this part" msgstr "此零件庫存項的過期時間 (天)" -#: part/models.py:1231 part/serializers.py:889 +#: part/models.py:1231 part/serializers.py:901 msgid "Minimum Stock" msgstr "最低庫存" @@ -6447,355 +6491,355 @@ msgstr "零件關係不能在零件和自身之間創建" msgid "Duplicate relationship already exists" msgstr "複製關係已經存在" -#: part/serializers.py:115 +#: part/serializers.py:109 msgid "Parent Category" msgstr "上級類別" -#: part/serializers.py:116 +#: part/serializers.py:110 msgid "Parent part category" msgstr "上級零件類別" -#: part/serializers.py:124 part/serializers.py:174 +#: part/serializers.py:118 part/serializers.py:170 msgid "Subcategories" msgstr "子類別" -#: part/serializers.py:213 +#: part/serializers.py:209 msgid "Results" msgstr "結果" -#: part/serializers.py:214 +#: part/serializers.py:210 msgid "Number of results recorded against this template" msgstr "根據該模板記錄的結果數量" -#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 +#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "購買此庫存項的貨幣" -#: part/serializers.py:290 +#: part/serializers.py:286 msgid "File is not an image" msgstr "檔案不是圖片" -#: part/serializers.py:393 +#: part/serializers.py:396 msgid "Original Part" msgstr "原始零件" -#: part/serializers.py:394 +#: part/serializers.py:397 msgid "Select original part to duplicate" msgstr "選擇要複製的原始零件" -#: part/serializers.py:399 +#: part/serializers.py:402 msgid "Copy Image" msgstr "複製圖片" -#: part/serializers.py:400 +#: part/serializers.py:403 msgid "Copy image from original part" msgstr "從原零件複製圖片" -#: part/serializers.py:406 +#: part/serializers.py:409 msgid "Copy BOM" msgstr "複製物料清單" -#: part/serializers.py:407 +#: part/serializers.py:410 msgid "Copy bill of materials from original part" msgstr "從原始零件複製材料清單" -#: part/serializers.py:414 +#: part/serializers.py:417 msgid "Copy parameter data from original part" msgstr "從原始零件複製參數數據" -#: part/serializers.py:420 +#: part/serializers.py:423 msgid "Copy Notes" msgstr "複製備註" -#: part/serializers.py:421 +#: part/serializers.py:424 msgid "Copy notes from original part" msgstr "從原始零件複製備註" -#: part/serializers.py:427 +#: part/serializers.py:430 msgid "Copy Tests" msgstr "複製測試模板" -#: part/serializers.py:428 +#: part/serializers.py:431 msgid "Copy test templates from original part" msgstr "從原始零件複製測試模板" -#: part/serializers.py:446 +#: part/serializers.py:449 msgid "Initial Stock Quantity" msgstr "初始化庫存數量" -#: part/serializers.py:448 +#: part/serializers.py:451 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "指定此零件的初始庫存數量。如果數量為零,則不添加任何庫存。" -#: part/serializers.py:455 +#: part/serializers.py:458 msgid "Initial Stock Location" msgstr "初始化庫存地點" -#: part/serializers.py:456 +#: part/serializers.py:459 msgid "Specify initial stock location for this Part" msgstr "初始化指定此零件的庫存地點" -#: part/serializers.py:473 +#: part/serializers.py:476 msgid "Select supplier (or leave blank to skip)" msgstr "選擇供應商(或為空以跳過)" -#: part/serializers.py:489 +#: part/serializers.py:492 msgid "Select manufacturer (or leave blank to skip)" msgstr "選擇製造商(或為空)" -#: part/serializers.py:499 +#: part/serializers.py:502 msgid "Manufacturer part number" msgstr "製造商零件號" -#: part/serializers.py:506 +#: part/serializers.py:509 msgid "Selected company is not a valid supplier" msgstr "所選公司不是一個有效的供應商" -#: part/serializers.py:515 +#: part/serializers.py:518 msgid "Selected company is not a valid manufacturer" msgstr "所選公司不是一個有效的製造商" -#: part/serializers.py:526 +#: part/serializers.py:529 msgid "Manufacturer part matching this MPN already exists" msgstr "與此製造商零件編號 (MPN) 的相匹配的製造商零件已存在" -#: part/serializers.py:533 +#: part/serializers.py:536 msgid "Supplier part matching this SKU already exists" msgstr "匹配此庫存單位 (SKU) 的供應商零件已存在" -#: part/serializers.py:804 +#: part/serializers.py:816 msgid "Category Name" msgstr "類別名稱" -#: part/serializers.py:833 +#: part/serializers.py:845 msgid "Building" msgstr "正在生產" -#: part/serializers.py:834 +#: part/serializers.py:846 msgid "Quantity of this part currently being in production" msgstr "此零件目前生產中數量" -#: part/serializers.py:841 +#: part/serializers.py:853 msgid "Outstanding quantity of this part scheduled to be built" msgstr "此零件排程待製造未完成數量" -#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:30 msgid "Stock Items" msgstr "庫存項" -#: part/serializers.py:865 +#: part/serializers.py:877 msgid "Revisions" msgstr "修訂" -#: part/serializers.py:869 part/serializers.py:1161 +#: part/serializers.py:881 part/serializers.py:1188 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "庫存總量" -#: part/serializers.py:877 +#: part/serializers.py:889 msgid "Unallocated Stock" msgstr "未分配的庫存" -#: part/serializers.py:885 +#: part/serializers.py:897 msgid "Variant Stock" msgstr "變體庫存" -#: part/serializers.py:941 +#: part/serializers.py:968 msgid "Duplicate Part" msgstr "重複零件" -#: part/serializers.py:942 +#: part/serializers.py:969 msgid "Copy initial data from another Part" msgstr "從另一個零件複製初始數據" -#: part/serializers.py:948 +#: part/serializers.py:975 msgid "Initial Stock" msgstr "初始庫存" -#: part/serializers.py:949 +#: part/serializers.py:976 msgid "Create Part with initial stock quantity" msgstr "創建具有初始庫存數量的零件" -#: part/serializers.py:955 +#: part/serializers.py:982 msgid "Supplier Information" msgstr "供應商信息" -#: part/serializers.py:956 +#: part/serializers.py:983 msgid "Add initial supplier information for this part" msgstr "添加此零件的初始供應商信息" -#: part/serializers.py:965 +#: part/serializers.py:992 msgid "Copy Category Parameters" msgstr "複製類別參數" -#: part/serializers.py:966 +#: part/serializers.py:993 msgid "Copy parameter templates from selected part category" msgstr "從選擇的零件複製參數模版" -#: part/serializers.py:971 +#: part/serializers.py:998 msgid "Existing Image" msgstr "現有的圖片" -#: part/serializers.py:972 +#: part/serializers.py:999 msgid "Filename of an existing part image" msgstr "現有零件圖片的文件名" -#: part/serializers.py:989 +#: part/serializers.py:1016 msgid "Image file does not exist" msgstr "圖片不存在" -#: part/serializers.py:1133 +#: part/serializers.py:1160 msgid "Validate entire Bill of Materials" msgstr "驗證整個物料清單" -#: part/serializers.py:1167 part/serializers.py:1759 +#: part/serializers.py:1194 part/serializers.py:1802 msgid "Can Build" msgstr "可以創建" -#: part/serializers.py:1184 +#: part/serializers.py:1211 msgid "Required for Build Orders" msgstr "生產工單需求數" -#: part/serializers.py:1189 +#: part/serializers.py:1216 msgid "Allocated to Build Orders" msgstr "已分配至生產工單" -#: part/serializers.py:1196 +#: part/serializers.py:1223 msgid "Required for Sales Orders" msgstr "銷售訂單需求數" -#: part/serializers.py:1200 +#: part/serializers.py:1227 msgid "Allocated to Sales Orders" msgstr "已分配至銷售訂單" -#: part/serializers.py:1260 +#: part/serializers.py:1287 msgid "Part IPN" msgstr "" -#: part/serializers.py:1267 +#: part/serializers.py:1294 msgid "Part Description" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1338 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1348 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1326 +#: part/serializers.py:1358 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1333 +#: part/serializers.py:1365 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1334 +#: part/serializers.py:1366 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1341 +#: part/serializers.py:1373 msgid "Generate Report" msgstr "產製報表" -#: part/serializers.py:1342 +#: part/serializers.py:1374 msgid "Generate a stocktake report for the selected parts" msgstr "產製選定零件的庫存報表" -#: part/serializers.py:1445 +#: part/serializers.py:1477 msgid "Minimum Price" msgstr "最低價格" -#: part/serializers.py:1446 +#: part/serializers.py:1478 msgid "Override calculated value for minimum price" msgstr "覆蓋已計算的最低價格值" -#: part/serializers.py:1453 +#: part/serializers.py:1485 msgid "Minimum price currency" msgstr "最低價格貨幣" -#: part/serializers.py:1460 +#: part/serializers.py:1492 msgid "Maximum Price" msgstr "最高價格" -#: part/serializers.py:1461 +#: part/serializers.py:1493 msgid "Override calculated value for maximum price" msgstr "覆蓋已計算的最高價格值" -#: part/serializers.py:1468 +#: part/serializers.py:1500 msgid "Maximum price currency" msgstr "最高價格貨幣" -#: part/serializers.py:1497 +#: part/serializers.py:1529 msgid "Update" msgstr "更新" -#: part/serializers.py:1498 +#: part/serializers.py:1530 msgid "Update pricing for this part" msgstr "更新這個零件的價格" -#: part/serializers.py:1521 +#: part/serializers.py:1553 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "無法將所提供的貨幣轉換為 {default_currency}" -#: part/serializers.py:1528 +#: part/serializers.py:1560 msgid "Minimum price must not be greater than maximum price" msgstr "最低價格不能高於最高價格。" -#: part/serializers.py:1531 +#: part/serializers.py:1563 msgid "Maximum price must not be less than minimum price" msgstr "最高價格不能低於最低價格" -#: part/serializers.py:1684 +#: part/serializers.py:1716 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1697 +#: part/serializers.py:1729 msgid "Select the parent assembly" msgstr "選擇父裝配" -#: part/serializers.py:1725 +#: part/serializers.py:1764 msgid "Select the component part" msgstr "選擇零部件" -#: part/serializers.py:1927 +#: part/serializers.py:1991 msgid "Select part to copy BOM from" msgstr "選擇要複製物料清單的零件" -#: part/serializers.py:1935 +#: part/serializers.py:1999 msgid "Remove Existing Data" msgstr "移除現有數據" -#: part/serializers.py:1936 +#: part/serializers.py:2000 msgid "Remove existing BOM items before copying" msgstr "複製前刪除現有的物料清單項目" -#: part/serializers.py:1941 +#: part/serializers.py:2005 msgid "Include Inherited" msgstr "包含繼承的" -#: part/serializers.py:1942 +#: part/serializers.py:2006 msgid "Include BOM items which are inherited from templated parts" msgstr "包含從模板零件繼承的物料清單項目" -#: part/serializers.py:1947 +#: part/serializers.py:2011 msgid "Skip Invalid Rows" msgstr "跳過無效行" -#: part/serializers.py:1948 +#: part/serializers.py:2012 msgid "Enable this option to skip invalid rows" msgstr "啓用此選項以跳過無效行" -#: part/serializers.py:1953 +#: part/serializers.py:2017 msgid "Copy Substitute Parts" msgstr "複製替代品零件" -#: part/serializers.py:1954 +#: part/serializers.py:2018 msgid "Copy substitute parts when duplicate BOM items" msgstr "複製物料清單項目時複製替代品零件" @@ -7516,7 +7560,7 @@ msgstr "邊框" msgid "Print a border around each label" msgstr "打印每個標籤的邊框" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 msgid "Landscape" msgstr "橫屏模式" @@ -7596,64 +7640,77 @@ msgstr "為掃描 TME 條形碼提供支持" msgid "The Supplier which acts as 'TME'" msgstr "作為‘TME’的供應商" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "只有員工用户可以管理插件" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "插件安裝已禁用" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "插件安裝成功" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "插件安裝到 {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "在插件倉庫中找不到插件" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "插件不是一個打包的插件" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "找不到插件包名稱" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "只有員工用户可以管理插件" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "插件卸載已禁用" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "插件無法卸載,因為它目前處於激活狀態" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "不可解除安裝此模組(屬於強制)" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "不可解除安裝此模組(範例模組)" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "不可解除安裝此模組(內建模組)" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "模組尚未安裝" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "找不到模組安裝紀錄" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "插件卸載成功" @@ -7900,55 +7957,55 @@ msgstr "安裝尚未確認" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "完全重載" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "執行插件庫的完整重載" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "強制重載" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "強制重載插件庫,即使已經加載" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "收集插件" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "收集插件並添加到註冊表中" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "激活插件" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "激活此插件" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "強制模組不可停用" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "刪除配置" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "從數據庫中刪除插件配置" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "此設定所適用的使用者" -#: report/api.py:44 report/serializers.py:102 report/serializers.py:152 +#: report/api.py:44 report/serializers.py:125 report/serializers.py:175 msgid "Items" msgstr "項目" @@ -7964,7 +8021,7 @@ msgstr "插件不支持標籤打印" msgid "Invalid label dimensions" msgstr "無效的標籤尺寸" -#: report/api.py:183 report/api.py:267 +#: report/api.py:183 report/api.py:271 msgid "No valid items provided to template" msgstr "沒有有效的項目提供到模板" @@ -7988,152 +8045,156 @@ msgstr "字母" msgid "Template file with this name already exists" msgstr "已存在具有此名稱的模板" -#: report/models.py:217 +#: report/models.py:220 msgid "Template name" msgstr "模版名稱" -#: report/models.py:223 +#: report/models.py:226 msgid "Template description" msgstr "模板説明" -#: report/models.py:229 +#: report/models.py:232 msgid "Revision number (auto-increments)" msgstr "修訂編號 (自動增量)" -#: report/models.py:235 +#: report/models.py:238 msgid "Attach to Model on Print" msgstr "打印時附加到模型" -#: report/models.py:237 +#: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" msgstr "打印時將報告輸出保存為附件與鏈接模型實例" -#: report/models.py:281 +#: report/models.py:284 msgid "Filename Pattern" msgstr "文件名樣式" -#: report/models.py:282 +#: report/models.py:285 msgid "Pattern for generating filenames" msgstr "生成文件名模式" -#: report/models.py:287 +#: report/models.py:290 msgid "Template is enabled" msgstr "模板已啓用" -#: report/models.py:294 +#: report/models.py:297 msgid "Target model type for template" msgstr "模版的目標模型類型" -#: report/models.py:314 +#: report/models.py:317 msgid "Filters" msgstr "篩選器" -#: report/models.py:315 +#: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "模版查詢篩選器 (逗號分隔的鍵值對列表)" -#: report/models.py:374 report/models.py:670 +#: report/models.py:377 report/models.py:673 msgid "Template file" msgstr "模板包文件" -#: report/models.py:382 +#: report/models.py:385 msgid "Page size for PDF reports" msgstr "PDF 報告的頁面大小" -#: report/models.py:388 +#: report/models.py:391 msgid "Render report in landscape orientation" msgstr "橫向渲染報告" -#: report/models.py:393 +#: report/models.py:396 msgid "Merge" msgstr "合併" -#: report/models.py:394 +#: report/models.py:397 msgid "Render a single report against selected items" msgstr "針對所選項目產出合併單一報告" -#: report/models.py:449 +#: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "由模板 {self.name} 產生的報告" -#: report/models.py:546 report/models.py:585 report/models.py:586 +#: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" msgstr "模板語法錯誤" -#: report/models.py:553 report/models.py:592 +#: report/models.py:556 report/models.py:595 msgid "Error rendering report" msgstr "報告渲染錯誤" -#: report/models.py:612 +#: report/models.py:615 msgid "Error generating report" msgstr "生成報告錯誤" -#: report/models.py:644 +#: report/models.py:647 msgid "Error merging report outputs" msgstr "合併報告輸出時發生錯誤" -#: report/models.py:676 +#: report/models.py:679 msgid "Width [mm]" msgstr "寬度 [mm]" -#: report/models.py:677 +#: report/models.py:680 msgid "Label width, specified in mm" msgstr "標籤寬度,以毫米為單位。" -#: report/models.py:683 +#: report/models.py:686 msgid "Height [mm]" msgstr "高度 [mm]" -#: report/models.py:684 +#: report/models.py:687 msgid "Label height, specified in mm" msgstr "標籤高度,以毫米為單位。" -#: report/models.py:789 +#: report/models.py:792 msgid "Error printing labels" msgstr "列印標籤時發生錯誤" -#: report/models.py:808 +#: report/models.py:811 msgid "Snippet" msgstr "代碼片段" -#: report/models.py:809 +#: report/models.py:812 msgid "Report snippet file" msgstr "報告代碼片段文件" -#: report/models.py:816 +#: report/models.py:819 msgid "Snippet file description" msgstr "代碼片段文件描述" -#: report/models.py:834 +#: report/models.py:837 msgid "Asset" msgstr "資產" -#: report/models.py:835 +#: report/models.py:838 msgid "Report asset file" msgstr "報告資產文件" -#: report/models.py:842 +#: report/models.py:845 msgid "Asset file description" msgstr "資產文件描述" -#: report/serializers.py:95 +#: report/serializers.py:37 +msgid "User must be authenticated to save report templates" +msgstr "" + +#: report/serializers.py:118 msgid "Select report template" msgstr "選擇報表模板" -#: report/serializers.py:103 report/serializers.py:153 +#: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" msgstr "要包含在報告中的項目主鍵列表" -#: report/serializers.py:136 +#: report/serializers.py:159 msgid "Select label template" msgstr "選擇標籤模板" -#: report/serializers.py:144 +#: report/serializers.py:167 msgid "Printing Plugin" msgstr "打印插件" -#: report/serializers.py:145 +#: report/serializers.py:168 msgid "Select plugin to use for label printing" msgstr "選擇用於標籤打印的插件" @@ -8231,7 +8292,7 @@ msgstr "庫存項測試報告" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:641 +#: stock/serializers.py:655 msgid "Installed Items" msgstr "已安裝的項目" @@ -8288,7 +8349,7 @@ msgstr "" msgid "part_image tag requires a Part instance" msgstr "parpart_image 標籤需要一個零件實例" -#: report/templatetags/report.py:519 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "公司_圖片標籤需要一個公司實例" @@ -8304,7 +8365,7 @@ msgstr "按頂級位置篩選" msgid "Include sub-locations in filtered results" msgstr "在篩選結果中包含子地點" -#: stock/api.py:343 stock/serializers.py:1213 +#: stock/api.py:343 stock/serializers.py:1227 msgid "Parent Location" msgstr "上級地點" @@ -8388,7 +8449,7 @@ msgstr "過期日期前" msgid "Expiry date after" msgstr "過期日期後" -#: stock/api.py:936 stock/serializers.py:646 +#: stock/api.py:936 stock/serializers.py:660 msgid "Stale" msgstr "過期" @@ -8522,7 +8583,7 @@ msgstr "必須指定零件" msgid "Stock items cannot be located into structural stock locations!" msgstr "庫存項不能存放在結構性庫存地點!" -#: stock/models.py:938 stock/serializers.py:466 +#: stock/models.py:938 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "無法為虛擬零件創建庫存項" @@ -8567,7 +8628,7 @@ msgstr "為此庫存項目選擇匹配的供應商零件" msgid "Where is this stock item located?" msgstr "這個庫存物品在哪裏?" -#: stock/models.py:1064 stock/serializers.py:1649 +#: stock/models.py:1064 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "包裝此庫存物品存儲在" @@ -8583,7 +8644,7 @@ msgstr "此項目是否安裝在另一個項目中?" msgid "Serial number for this item" msgstr "此項目的序列號" -#: stock/models.py:1111 stock/serializers.py:1634 +#: stock/models.py:1111 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "此庫存項的批號" @@ -8696,7 +8757,7 @@ msgstr "庫存項目前正在生產" msgid "Serialized stock cannot be merged" msgstr "序列化的庫存不能合併" -#: stock/models.py:2094 stock/serializers.py:1504 +#: stock/models.py:2094 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "複製庫存項" @@ -8820,7 +8881,7 @@ msgstr "選擇要生成序列號的零件" msgid "Quantity of serial numbers to generate" msgstr "要生成的序列號的數量" -#: stock/serializers.py:245 +#: stock/serializers.py:246 msgid "Test template for this result" msgstr "此結果的測試模板" @@ -8844,222 +8905,222 @@ msgstr "父項" msgid "Parent stock item" msgstr "父庫存項" -#: stock/serializers.py:451 +#: stock/serializers.py:454 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "添加時使用包裝尺寸:定義的數量是包裝的數量" -#: stock/serializers.py:453 +#: stock/serializers.py:456 msgid "Use pack size" msgstr "使用包裝數" -#: stock/serializers.py:460 stock/serializers.py:715 +#: stock/serializers.py:463 stock/serializers.py:729 msgid "Enter serial numbers for new items" msgstr "輸入新項目的序列號" -#: stock/serializers.py:568 +#: stock/serializers.py:571 msgid "Supplier Part Number" msgstr "供應商零件編號" -#: stock/serializers.py:638 users/models.py:187 +#: stock/serializers.py:652 users/models.py:187 msgid "Expired" msgstr "已過期" -#: stock/serializers.py:644 +#: stock/serializers.py:658 msgid "Child Items" msgstr "子項目" -#: stock/serializers.py:648 +#: stock/serializers.py:662 msgid "Tracking Items" msgstr "跟蹤項目" -#: stock/serializers.py:654 +#: stock/serializers.py:668 msgid "Purchase price of this stock item, per unit or pack" msgstr "此庫存商品的購買價格,單位或包裝" -#: stock/serializers.py:692 +#: stock/serializers.py:706 msgid "Enter number of stock items to serialize" msgstr "輸入要序列化的庫存項目數量" -#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 -#: stock/serializers.py:919 +#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795 +#: stock/serializers.py:933 msgid "No stock item provided" msgstr "未提供庫存項" -#: stock/serializers.py:708 +#: stock/serializers.py:722 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "數量不得超過現有庫存量 ({q})" -#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 -#: stock/serializers.py:1831 +#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815 +#: stock/serializers.py:1864 msgid "Destination stock location" msgstr "目標庫存位置" -#: stock/serializers.py:746 +#: stock/serializers.py:760 msgid "Serial numbers cannot be assigned to this part" msgstr "此零件不能分配序列號" -#: stock/serializers.py:766 +#: stock/serializers.py:780 msgid "Serial numbers already exist" msgstr "序列號已存在" -#: stock/serializers.py:816 +#: stock/serializers.py:830 msgid "Select stock item to install" msgstr "選擇要安裝的庫存項目" -#: stock/serializers.py:823 +#: stock/serializers.py:837 msgid "Quantity to Install" msgstr "安裝數量" -#: stock/serializers.py:824 +#: stock/serializers.py:838 msgid "Enter the quantity of items to install" msgstr "輸入要安裝的項目數量" -#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 +#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065 msgid "Add transaction note (optional)" msgstr "添加交易記錄 (可選)" -#: stock/serializers.py:837 +#: stock/serializers.py:851 msgid "Quantity to install must be at least 1" msgstr "安裝數量必須至少為1" -#: stock/serializers.py:845 +#: stock/serializers.py:859 msgid "Stock item is unavailable" msgstr "庫存項不可用" -#: stock/serializers.py:856 +#: stock/serializers.py:870 msgid "Selected part is not in the Bill of Materials" msgstr "所選零件不在物料清單中" -#: stock/serializers.py:869 +#: stock/serializers.py:883 msgid "Quantity to install must not exceed available quantity" msgstr "安裝數量不得超過可用數量" -#: stock/serializers.py:904 +#: stock/serializers.py:918 msgid "Destination location for uninstalled item" msgstr "已卸載項目的目標位置" -#: stock/serializers.py:942 +#: stock/serializers.py:956 msgid "Select part to convert stock item into" msgstr "選擇要將庫存項目轉換為的零件" -#: stock/serializers.py:955 +#: stock/serializers.py:969 msgid "Selected part is not a valid option for conversion" msgstr "所選零件不是有效的轉換選項" -#: stock/serializers.py:972 +#: stock/serializers.py:986 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "無法轉換已分配供應商零件的庫存項" -#: stock/serializers.py:1006 +#: stock/serializers.py:1020 msgid "Stock item status code" msgstr "庫存項狀態代碼" -#: stock/serializers.py:1035 +#: stock/serializers.py:1049 msgid "Select stock items to change status" msgstr "選擇要更改狀態的庫存項目" -#: stock/serializers.py:1041 +#: stock/serializers.py:1055 msgid "No stock items selected" msgstr "未選擇庫存商品" -#: stock/serializers.py:1148 stock/serializers.py:1219 +#: stock/serializers.py:1162 stock/serializers.py:1233 msgid "Sublocations" msgstr "轉租" -#: stock/serializers.py:1214 +#: stock/serializers.py:1228 msgid "Parent stock location" msgstr "上級庫存地點" -#: stock/serializers.py:1333 +#: stock/serializers.py:1366 msgid "Part must be salable" msgstr "零件必須可銷售" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Item is allocated to a sales order" msgstr "物料已分配到銷售訂單" -#: stock/serializers.py:1341 +#: stock/serializers.py:1374 msgid "Item is allocated to a build order" msgstr "項目被分配到生產訂單中" -#: stock/serializers.py:1365 +#: stock/serializers.py:1398 msgid "Customer to assign stock items" msgstr "客户分配庫存項目" -#: stock/serializers.py:1371 +#: stock/serializers.py:1404 msgid "Selected company is not a customer" msgstr "所選公司不是客户" -#: stock/serializers.py:1379 +#: stock/serializers.py:1412 msgid "Stock assignment notes" msgstr "庫存分配説明" -#: stock/serializers.py:1389 stock/serializers.py:1677 +#: stock/serializers.py:1422 stock/serializers.py:1710 msgid "A list of stock items must be provided" msgstr "必須提供庫存物品清單" -#: stock/serializers.py:1468 +#: stock/serializers.py:1501 msgid "Stock merging notes" msgstr "庫存合併説明" -#: stock/serializers.py:1473 +#: stock/serializers.py:1506 msgid "Allow mismatched suppliers" msgstr "允許不匹配的供應商" -#: stock/serializers.py:1474 +#: stock/serializers.py:1507 msgid "Allow stock items with different supplier parts to be merged" msgstr "允許合併具有不同供應商零件的庫存項目" -#: stock/serializers.py:1479 +#: stock/serializers.py:1512 msgid "Allow mismatched status" msgstr "允許不匹配的狀態" -#: stock/serializers.py:1480 +#: stock/serializers.py:1513 msgid "Allow stock items with different status codes to be merged" msgstr "允許合併具有不同狀態代碼的庫存項目" -#: stock/serializers.py:1490 +#: stock/serializers.py:1523 msgid "At least two stock items must be provided" msgstr "必須提供至少兩件庫存物品" -#: stock/serializers.py:1557 +#: stock/serializers.py:1590 msgid "No Change" msgstr "無更改" -#: stock/serializers.py:1595 +#: stock/serializers.py:1628 msgid "StockItem primary key value" msgstr "庫存項主鍵值" -#: stock/serializers.py:1608 +#: stock/serializers.py:1641 msgid "Stock item is not in stock" msgstr "庫存項無庫存" -#: stock/serializers.py:1611 +#: stock/serializers.py:1644 msgid "Stock item is already in stock" msgstr "庫存項已在庫" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Quantity must not be negative" msgstr "數量不可為負" -#: stock/serializers.py:1667 +#: stock/serializers.py:1700 msgid "Stock transaction notes" msgstr "庫存交易記錄" -#: stock/serializers.py:1837 +#: stock/serializers.py:1870 msgid "Merge into existing stock" msgstr "合併至現有庫存" -#: stock/serializers.py:1838 +#: stock/serializers.py:1871 msgid "Merge returned items into existing stock items if possible" msgstr "可行時將退回項目併入現有庫存" -#: stock/serializers.py:1881 +#: stock/serializers.py:1914 msgid "Next Serial Number" msgstr "下一個序列號" -#: stock/serializers.py:1887 +#: stock/serializers.py:1920 msgid "Previous Serial Number" msgstr "上一個序列號" @@ -9541,83 +9602,99 @@ msgstr "銷售訂單" msgid "Return Orders" msgstr "退貨訂單" -#: users/serializers.py:190 +#: users/serializers.py:186 msgid "Username" msgstr "用户名" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First Name" msgstr "名" -#: users/serializers.py:193 +#: users/serializers.py:189 msgid "First name of the user" msgstr "用户的名字(不包括姓氏)" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last Name" msgstr "姓" -#: users/serializers.py:197 +#: users/serializers.py:193 msgid "Last name of the user" msgstr "用户的姓氏" -#: users/serializers.py:201 +#: users/serializers.py:197 msgid "Email address of the user" msgstr "用户的電子郵件地址" -#: users/serializers.py:309 -msgid "Staff" -msgstr "職員" +#: users/serializers.py:240 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "此用户是否擁有員工權限" +#: users/serializers.py:249 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:329 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:330 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "超級用户" -#: users/serializers.py:315 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "此用户是否為超級用户" -#: users/serializers.py:319 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "此用户帳户是否已激活" -#: users/serializers.py:331 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "僅超級使用者可調整此欄位" -#: users/serializers.py:359 +#: users/serializers.py:379 msgid "Password" msgstr "密碼" -#: users/serializers.py:360 +#: users/serializers.py:380 msgid "Password for the user" msgstr "使用者密碼" -#: users/serializers.py:366 +#: users/serializers.py:386 msgid "Override warning" msgstr "忽略警告" -#: users/serializers.py:367 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "忽略密碼規則警告" -#: users/serializers.py:423 +#: users/serializers.py:417 +msgid "Staff" +msgstr "" + +#: users/serializers.py:418 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "您沒有建立使用者的權限" -#: users/serializers.py:444 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "您的帳號已經建立完成。" -#: users/serializers.py:446 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "請使用重設密碼功能來登入" -#: users/serializers.py:452 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "歡迎使用 InvenTree" diff --git a/src/backend/InvenTree/manage.py b/src/backend/InvenTree/manage.py index 9e1d7b6804..baf3c1583d 100755 --- a/src/backend/InvenTree/manage.py +++ b/src/backend/InvenTree/manage.py @@ -22,4 +22,8 @@ def main(): if __name__ == '__main__': - main() + try: + main() + except KeyboardInterrupt: + print('INVE-W15: Process interrupted by user.') + sys.exit(1) diff --git a/src/backend/InvenTree/order/api.py b/src/backend/InvenTree/order/api.py index 7cb92230c2..7ad506bc9e 100644 --- a/src/backend/InvenTree/order/api.py +++ b/src/backend/InvenTree/order/api.py @@ -82,7 +82,7 @@ class GeneralExtraLineList(SerializerContextMixin, DataExportViewMixin): filter_backends = SEARCH_ORDER_FILTER - ordering_fields = ['quantity', 'notes', 'reference'] + ordering_fields = ['quantity', 'notes', 'reference', 'line'] search_fields = ['quantity', 'notes', 'reference', 'description'] @@ -717,6 +717,7 @@ class PurchaseOrderLineItemList( 'order': 'order__reference', 'status': 'order__status', 'complete_date': 'order__complete_date', + 'line': ['line', 'part__SKU'], } ordering_fields = [ @@ -733,6 +734,7 @@ class PurchaseOrderLineItemList( 'order', 'status', 'complete_date', + 'line', ] search_fields = [ @@ -1067,6 +1069,7 @@ class SalesOrderLineItemList( 'reference', 'sale_price', 'target_date', + 'line', ] ordering_field_aliases = { @@ -1074,6 +1077,7 @@ class SalesOrderLineItemList( 'part': 'part__name', 'IPN': 'part__IPN', 'order': 'order__reference', + 'line': ['line', 'part__name'], } search_fields = ['part__name', 'quantity', 'reference'] @@ -1720,9 +1724,11 @@ class ReturnOrderLineItemList( 'reference', 'target_date', 'received_date', + 'line', ] ordering_field_aliases = { + 'line': ['line', 'item__part__name'], 'part': 'item__part__name', 'IPN': 'item__part__IPN', 'stock': ['item__quantity', 'item__serial_int', 'item__serial'], diff --git a/src/backend/InvenTree/order/migrations/0116_purchaseorderextraline_line_and_more.py b/src/backend/InvenTree/order/migrations/0116_purchaseorderextraline_line_and_more.py new file mode 100644 index 0000000000..740c9382e2 --- /dev/null +++ b/src/backend/InvenTree/order/migrations/0116_purchaseorderextraline_line_and_more.py @@ -0,0 +1,79 @@ +# Generated by Django 5.2.12 on 2026-04-08 03:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("order", "0115_purchaseorder_updated_at_returnorder_updated_at_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="purchaseorderextraline", + name="line", + field=models.CharField( + blank=True, + default="", + help_text="Line number for this item (optional)", + max_length=20, + verbose_name="Line Number", + ), + ), + migrations.AddField( + model_name="purchaseorderlineitem", + name="line", + field=models.CharField( + blank=True, + default="", + help_text="Line number for this item (optional)", + max_length=20, + verbose_name="Line Number", + ), + ), + migrations.AddField( + model_name="returnorderextraline", + name="line", + field=models.CharField( + blank=True, + default="", + help_text="Line number for this item (optional)", + max_length=20, + verbose_name="Line Number", + ), + ), + migrations.AddField( + model_name="returnorderlineitem", + name="line", + field=models.CharField( + blank=True, + default="", + help_text="Line number for this item (optional)", + max_length=20, + verbose_name="Line Number", + ), + ), + migrations.AddField( + model_name="salesorderextraline", + name="line", + field=models.CharField( + blank=True, + default="", + help_text="Line number for this item (optional)", + max_length=20, + verbose_name="Line Number", + ), + ), + migrations.AddField( + model_name="salesorderlineitem", + name="line", + field=models.CharField( + blank=True, + default="", + help_text="Line number for this item (optional)", + max_length=20, + verbose_name="Line Number", + ), + ), + ] diff --git a/src/backend/InvenTree/order/models.py b/src/backend/InvenTree/order/models.py index 2d7a550aea..58a67ef1f3 100644 --- a/src/backend/InvenTree/order/models.py +++ b/src/backend/InvenTree/order/models.py @@ -537,6 +537,19 @@ class Order( related_name='+', ) + @property + def company(self): + """Return the company associated with this order. + + This method must be implemented by any subclass, as the 'company' field may be named differently for different order types (e.g. supplier vs customer). + """ + raise NotImplementedError(f'company() method not implemented for {__class__}') + + @property + def order_address(self): + """Return the Address associated with this order.""" + return self.address or self.company.primary_address + @classmethod def get_status_class(cls): """Return the enumeration class which represents the 'status' field for this model.""" @@ -1793,6 +1806,15 @@ class OrderLineItem(InvenTree.models.InvenTreeMetadataModel): if self.price: return self.quantity * self.price + line = models.CharField( + max_length=20, + blank=True, + default='', + null=False, + verbose_name=_('Line Number'), + help_text=_('Line number for this item (optional)'), + ) + reference = models.CharField( max_length=100, blank=True, @@ -2379,9 +2401,16 @@ class SalesOrderShipment( def address(self) -> Address: """Return the shipping address for this shipment. - If no specific shipment address is assigned, return the address from the order. + Lookup priority: + - Specific address assigned to this shipment + - Address assigned to the order + - Primary address of the customer """ - return self.shipment_address or self.order.address + return ( + self.shipment_address + or self.order.address + or self.order.customer.primary_address + ) def is_checked(self) -> bool: """Return True if this shipment has been checked.""" diff --git a/src/backend/InvenTree/order/serializers.py b/src/backend/InvenTree/order/serializers.py index 0721ff312b..e1a8de16f6 100644 --- a/src/backend/InvenTree/order/serializers.py +++ b/src/backend/InvenTree/order/serializers.py @@ -36,7 +36,7 @@ from InvenTree.serializers import ( InvenTreeModelSerializer, InvenTreeMoneySerializer, NotesFieldMixin, - enable_filter, + OptionalField, ) from order.status_codes import ( PurchaseOrderStatusGroups, @@ -126,20 +126,28 @@ class AbstractOrderSerializer( reference = serializers.CharField(required=True) # Detail for point-of-contact field - contact_detail = enable_filter( - ContactSerializer( - source='contact', many=False, read_only=True, allow_null=True - ), - True, + contact_detail = OptionalField( + serializer_class=ContactSerializer, + serializer_kwargs={ + 'source': 'contact', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=True, prefetch_fields=['contact'], ) # Detail for responsible field - responsible_detail = enable_filter( - OwnerSerializer( - source='responsible', read_only=True, allow_null=True, many=False - ), - True, + responsible_detail = OptionalField( + serializer_class=OwnerSerializer, + serializer_kwargs={ + 'source': 'responsible', + 'read_only': True, + 'allow_null': True, + 'many': False, + }, + default_include=True, prefetch_fields=['responsible'], ) @@ -147,11 +155,15 @@ class AbstractOrderSerializer( project_code_detail = common.filters.enable_project_code_filter() # Detail for address field - address_detail = enable_filter( - AddressBriefSerializer( - source='address', many=False, read_only=True, allow_null=True - ), - True, + address_detail = OptionalField( + serializer_class=AddressBriefSerializer, + serializer_kwargs={ + 'source': 'address', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=True, prefetch_fields=['address'], ) @@ -276,6 +288,7 @@ class AbstractLineItemSerializer(FilterableSerializerMixin, serializers.Serializ """Construct a set of fields for this serializer.""" return [ 'pk', + 'line', 'link', 'notes', 'order', @@ -309,6 +322,7 @@ class AbstractExtraLineSerializer( """Construct a set of fields for this serializer.""" return [ 'pk', + 'line', 'description', 'link', 'notes', @@ -430,10 +444,14 @@ class PurchaseOrderSerializer( source='supplier.name', read_only=True, label=_('Supplier Name') ) - supplier_detail = enable_filter( - CompanyBriefSerializer( - source='supplier', many=False, read_only=True, allow_null=True - ), + supplier_detail = OptionalField( + serializer_class=CompanyBriefSerializer, + serializer_kwargs={ + 'source': 'supplier', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, prefetch_fields=['supplier'], ) @@ -627,19 +645,28 @@ class PurchaseOrderLineItemSerializer( total_price = serializers.FloatField(read_only=True) - part_detail = enable_filter( - PartBriefSerializer( - source='get_base_part', many=False, read_only=True, allow_null=True - ), - False, + part_detail = OptionalField( + serializer_class=PartBriefSerializer, + serializer_kwargs={ + 'source': 'get_base_part', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=False, filter_name='part_detail', ) - supplier_part_detail = enable_filter( - SupplierPartSerializer( - source='part', brief=True, many=False, read_only=True, allow_null=True - ), - False, + supplier_part_detail = OptionalField( + serializer_class=SupplierPartSerializer, + serializer_kwargs={ + 'source': 'part', + 'brief': True, + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=False, filter_name='part_detail', ) @@ -653,11 +680,14 @@ class PurchaseOrderLineItemSerializer( default=False, ) - destination_detail = enable_filter( - stock.serializers.LocationBriefSerializer( - source='get_destination', read_only=True, allow_null=True - ), - True, + destination_detail = OptionalField( + serializer_class=stock.serializers.LocationBriefSerializer, + serializer_kwargs={ + 'source': 'get_destination', + 'read_only': True, + 'allow_null': True, + }, + default_include=True, prefetch_fields=['destination', 'order__destination'], ) @@ -665,17 +695,26 @@ class PurchaseOrderLineItemSerializer( help_text=_('Purchase price currency') ) - order_detail = enable_filter( - PurchaseOrderSerializer( - source='order', read_only=True, allow_null=True, many=False - ) + order_detail = OptionalField( + serializer_class=PurchaseOrderSerializer, + serializer_kwargs={ + 'source': 'order', + 'read_only': True, + 'allow_null': True, + 'many': False, + }, + default_include=True, ) - build_order_detail = enable_filter( - build.serializers.BuildSerializer( - source='build_order', read_only=True, allow_null=True, many=False - ), - True, + build_order_detail = OptionalField( + serializer_class=build.serializers.BuildSerializer, + serializer_kwargs={ + 'source': 'build_order', + 'read_only': True, + 'allow_null': True, + 'many': False, + }, + default_include=True, prefetch_fields=[ 'build_order__responsible', 'build_order__issued_by', @@ -761,10 +800,14 @@ class PurchaseOrderExtraLineSerializer( model = order.models.PurchaseOrderExtraLine fields = AbstractExtraLineSerializer.extra_line_fields([]) - order_detail = enable_filter( - PurchaseOrderSerializer( - source='order', many=False, read_only=True, allow_null=True - ) + order_detail = OptionalField( + serializer_class=PurchaseOrderSerializer, + serializer_kwargs={ + 'source': 'order', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, ) @@ -1096,10 +1139,14 @@ class SalesOrderSerializer( return queryset - customer_detail = enable_filter( - CompanyBriefSerializer( - source='customer', many=False, read_only=True, allow_null=True - ), + customer_detail = OptionalField( + serializer_class=CompanyBriefSerializer, + serializer_kwargs={ + 'source': 'customer', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, prefetch_fields=['customer'], ) @@ -1250,10 +1297,14 @@ class SalesOrderLineItemSerializer( return queryset - order_detail = enable_filter( - SalesOrderSerializer( - source='order', many=False, read_only=True, allow_null=True - ), + order_detail = OptionalField( + serializer_class=SalesOrderSerializer, + serializer_kwargs={ + 'source': 'order', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, prefetch_fields=[ 'order__created_by', 'order__responsible', @@ -1263,15 +1314,25 @@ class SalesOrderLineItemSerializer( ], ) - part_detail = enable_filter( - PartBriefSerializer(source='part', many=False, read_only=True, allow_null=True), + part_detail = OptionalField( + serializer_class=PartBriefSerializer, + serializer_kwargs={ + 'source': 'part', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, prefetch_fields=['part__pricing_data'], ) - customer_detail = enable_filter( - CompanyBriefSerializer( - source='order.customer', many=False, read_only=True, allow_null=True - ), + customer_detail = OptionalField( + serializer_class=CompanyBriefSerializer, + serializer_kwargs={ + 'source': 'order.customer', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, prefetch_fields=['order__customer'], ) @@ -1297,7 +1358,10 @@ class SalesOrderLineItemSerializer( @register_importer() class SalesOrderShipmentSerializer( - FilterableSerializerMixin, NotesFieldMixin, InvenTreeModelSerializer + DataImportExportSerializerMixin, + FilterableSerializerMixin, + NotesFieldMixin, + InvenTreeModelSerializer, ): """Serializer for the SalesOrderShipment class.""" @@ -1338,19 +1402,27 @@ class SalesOrderShipmentSerializer( read_only=True, allow_null=True, label=_('Allocated Items') ) - checked_by_detail = enable_filter( - UserSerializer( - source='checked_by', many=False, read_only=True, allow_null=True - ), - True, + checked_by_detail = OptionalField( + serializer_class=UserSerializer, + serializer_kwargs={ + 'source': 'checked_by', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=True, prefetch_fields=['checked_by'], ) - order_detail = enable_filter( - SalesOrderSerializer( - source='order', read_only=True, allow_null=True, many=False - ), - True, + order_detail = OptionalField( + serializer_class=SalesOrderSerializer, + serializer_kwargs={ + 'source': 'order', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=True, prefetch_fields=[ 'order', 'order__customer', @@ -1360,19 +1432,27 @@ class SalesOrderShipmentSerializer( ], ) - customer_detail = enable_filter( - CompanyBriefSerializer( - source='order.customer', many=False, read_only=True, allow_null=True - ), - False, + customer_detail = OptionalField( + serializer_class=CompanyBriefSerializer, + serializer_kwargs={ + 'source': 'order.customer', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=False, prefetch_fields=['order__customer'], ) - shipment_address_detail = enable_filter( - AddressBriefSerializer( - source='shipment_address', many=False, read_only=True, allow_null=True - ), - True, + shipment_address_detail = OptionalField( + serializer_class=AddressBriefSerializer, + serializer_kwargs={ + 'source': 'shipment_address', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=True, prefetch_fields=['shipment_address'], ) @@ -1423,46 +1503,71 @@ class SalesOrderAllocationSerializer( ) # Extra detail fields - order_detail = enable_filter( - SalesOrderSerializer( - source='line.order', many=False, read_only=True, allow_null=True - ) - ) - part_detail = enable_filter( - PartBriefSerializer( - source='item.part', many=False, read_only=True, allow_null=True - ), - True, - ) - item_detail = enable_filter( - stock.serializers.StockItemSerializer( - source='item', - many=False, - read_only=True, - allow_null=True, - part_detail=False, - location_detail=False, - supplier_part_detail=False, - ), - True, - ) - location_detail = enable_filter( - stock.serializers.LocationBriefSerializer( - source='item.location', many=False, read_only=True, allow_null=True - ) - ) - customer_detail = enable_filter( - CompanyBriefSerializer( - source='line.order.customer', many=False, read_only=True, allow_null=True - ) + order_detail = OptionalField( + serializer_class=SalesOrderSerializer, + serializer_kwargs={ + 'source': 'line.order', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, ) - shipment_detail = SalesOrderShipmentSerializer( - source='shipment', - order_detail=False, - many=False, - read_only=True, - allow_null=True, + part_detail = OptionalField( + serializer_class=PartBriefSerializer, + serializer_kwargs={ + 'source': 'item.part', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=True, + ) + + item_detail = OptionalField( + serializer_class=stock.serializers.StockItemSerializer, + serializer_kwargs={ + 'source': 'item', + 'many': False, + 'read_only': True, + 'allow_null': True, + 'part_detail': False, + 'location_detail': False, + 'supplier_part_detail': False, + }, + default_include=True, + ) + location_detail = OptionalField( + serializer_class=stock.serializers.LocationBriefSerializer, + serializer_kwargs={ + 'source': 'item.location', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + ) + + customer_detail = OptionalField( + serializer_class=CompanyBriefSerializer, + serializer_kwargs={ + 'source': 'line.order.customer', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + ) + + shipment_detail = OptionalField( + serializer_class=SalesOrderShipmentSerializer, + serializer_kwargs={ + 'source': 'shipment', + 'order_detail': False, + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=True, + prefetch_fields=['shipment'], ) @@ -1876,10 +1981,14 @@ class SalesOrderExtraLineSerializer( model = order.models.SalesOrderExtraLine fields = AbstractExtraLineSerializer.extra_line_fields([]) - order_detail = enable_filter( - SalesOrderSerializer( - source='order', many=False, read_only=True, allow_null=True - ) + order_detail = OptionalField( + serializer_class=SalesOrderSerializer, + serializer_kwargs={ + 'source': 'order', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, ) @@ -1937,10 +2046,14 @@ class ReturnOrderSerializer( return queryset - customer_detail = enable_filter( - CompanyBriefSerializer( - source='customer', many=False, read_only=True, allow_null=True - ), + customer_detail = OptionalField( + serializer_class=CompanyBriefSerializer, + serializer_kwargs={ + 'source': 'customer', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, prefetch_fields=['customer'], ) @@ -2098,10 +2211,14 @@ class ReturnOrderLineItemSerializer( 'part_detail', ]) - order_detail = enable_filter( - ReturnOrderSerializer( - source='order', many=False, read_only=True, allow_null=True - ), + order_detail = OptionalField( + serializer_class=ReturnOrderSerializer, + serializer_kwargs={ + 'source': 'order', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, prefetch_fields=[ 'order__created_by', 'order__responsible', @@ -2115,17 +2232,25 @@ class ReturnOrderLineItemSerializer( label=_('Quantity'), help_text=_('Quantity to return') ) - item_detail = enable_filter( - stock.serializers.StockItemSerializer( - source='item', many=False, read_only=True, allow_null=True - ), + item_detail = OptionalField( + serializer_class=stock.serializers.StockItemSerializer, + serializer_kwargs={ + 'source': 'item', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, prefetch_fields=['item__supplier_part'], ) - part_detail = enable_filter( - PartBriefSerializer( - source='item.part', many=False, read_only=True, allow_null=True - ) + part_detail = OptionalField( + serializer_class=PartBriefSerializer, + serializer_kwargs={ + 'source': 'item.part', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, ) price = InvenTreeMoneySerializer(allow_null=True) @@ -2144,8 +2269,12 @@ class ReturnOrderExtraLineSerializer( model = order.models.ReturnOrderExtraLine fields = AbstractExtraLineSerializer.extra_line_fields([]) - order_detail = enable_filter( - ReturnOrderSerializer( - source='order', many=False, read_only=True, allow_null=True - ) + order_detail = OptionalField( + serializer_class=ReturnOrderSerializer, + serializer_kwargs={ + 'source': 'order', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, ) diff --git a/src/backend/InvenTree/part/helpers.py b/src/backend/InvenTree/part/helpers.py index d07e3cfc13..7c55c9810e 100644 --- a/src/backend/InvenTree/part/helpers.py +++ b/src/backend/InvenTree/part/helpers.py @@ -5,7 +5,7 @@ import os from django.conf import settings import structlog -from jinja2 import Environment, select_autoescape +from jinja2.sandbox import SandboxedEnvironment from common.settings import get_global_setting @@ -37,11 +37,7 @@ def compile_full_name_template(*args, **kwargs): # Cache the template string _part_full_name_template_string = template_string - env = Environment( - autoescape=select_autoescape(default_for_string=False, default=False), - variable_start_string='{{', - variable_end_string='}}', - ) + env = SandboxedEnvironment(variable_start_string='{{', variable_end_string='}}') # Compile the template try: diff --git a/src/backend/InvenTree/part/models.py b/src/backend/InvenTree/part/models.py index 152df37b45..a9109c0174 100644 --- a/src/backend/InvenTree/part/models.py +++ b/src/backend/InvenTree/part/models.py @@ -2058,8 +2058,13 @@ class Part( Note: Does *NOT* delete inherited BOM items! """ + import part.tasks as part_tasks + self.bom_items.all().delete() + # Offload task to re-validate the BOM for this assembly + InvenTree.tasks.offload_task(part_tasks.check_bom_valid, self.pk, group='part') + def getRequiredParts(self, recursive=False, parts=None): """Return a list of parts required to make this part (i.e. BOM items). @@ -3923,9 +3928,12 @@ class BomItem(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel): assemblies = set() if db_instance: - # Find all assemblies which use this BomItem *after* we save + # Find all assemblies which use this BomItem *before* we save assemblies.update(db_instance.get_assemblies()) + # Update the set of assemblies to include those which use this BomItem *after* we save + assemblies.update(self.get_assemblies()) + for assembly in assemblies: # Offload task to update the checksum for this assembly InvenTree.tasks.offload_task( @@ -4079,7 +4087,9 @@ class BomItem(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel): These fields are used to calculate the checksum hash of this BOM item. """ return [ + 'part', 'part_id', + 'sub_part', 'sub_part_id', 'quantity', 'setup_quantity', diff --git a/src/backend/InvenTree/part/serializers.py b/src/backend/InvenTree/part/serializers.py index 8788ca8624..eb8746be18 100644 --- a/src/backend/InvenTree/part/serializers.py +++ b/src/backend/InvenTree/part/serializers.py @@ -35,13 +35,7 @@ from data_exporter.mixins import DataExportSerializerMixin from importer.registry import register_importer from InvenTree.mixins import DataImportExportSerializerMixin from InvenTree.ready import isGeneratingSchema -from InvenTree.serializers import ( - FilterableDateTimeField, - FilterableFloatField, - FilterableListField, - FilterableListSerializer, - enable_filter, -) +from InvenTree.serializers import OptionalField, TreePathSerializer from users.serializers import UserSerializer from .models import ( @@ -141,13 +135,15 @@ class CategorySerializer( return category.pk in self.starred_categories - path = enable_filter( - FilterableListField( - child=serializers.DictField(), - source='get_path', - read_only=True, - allow_null=True, - ), + path = OptionalField( + serializer_class=TreePathSerializer, + serializer_kwargs={ + 'source': 'get_path', + 'many': True, + 'read_only': True, + 'allow_null': True, + }, + default_include=False, filter_name='path_detail', ) @@ -354,18 +350,25 @@ class PartBriefSerializer( ) # Pricing fields - pricing_min = enable_filter( - InvenTree.serializers.InvenTreeMoneySerializer( - source='pricing_data.overall_min', allow_null=True, read_only=True - ), - True, + pricing_min = OptionalField( + serializer_class=InvenTree.serializers.InvenTreeMoneySerializer, + serializer_kwargs={ + 'source': 'pricing_data.overall_min', + 'allow_null': True, + 'read_only': True, + }, + default_include=True, filter_name='pricing', ) - pricing_max = enable_filter( - InvenTree.serializers.InvenTreeMoneySerializer( - source='pricing_data.overall_max', allow_null=True, read_only=True - ), - True, + + pricing_max = OptionalField( + serializer_class=InvenTree.serializers.InvenTreeMoneySerializer, + serializer_kwargs={ + 'source': 'pricing_data.overall_max', + 'allow_null': True, + 'read_only': True, + }, + default_include=True, filter_name='pricing', ) @@ -774,28 +777,37 @@ class PartSerializer( return part.pk in self.starred_parts # Extra detail for the category - category_detail = enable_filter( - CategorySerializer( - source='category', many=False, read_only=True, allow_null=True - ), + category_detail = OptionalField( + serializer_class=CategorySerializer, + serializer_kwargs={ + 'source': 'category', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, prefetch_fields=['category'], ) - category_path = enable_filter( - FilterableListField( - child=serializers.DictField(), - source='category.get_path', - read_only=True, - allow_null=True, - ), + category_path = OptionalField( + serializer_class=TreePathSerializer, + serializer_kwargs={ + 'source': 'category.get_path', + 'many': True, + 'read_only': True, + 'allow_null': True, + }, filter_name='path_detail', prefetch_fields=['category'], ) - default_location_detail = enable_filter( - DefaultLocationSerializer( - source='default_location', many=False, read_only=True, allow_null=True - ), + default_location_detail = OptionalField( + serializer_class=DefaultLocationSerializer, + serializer_kwargs={ + 'source': 'default_location', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, filter_name='location_detail', prefetch_fields=['default_location'], ) @@ -901,25 +913,36 @@ class PartSerializer( ) # Pricing fields - pricing_min = enable_filter( - InvenTree.serializers.InvenTreeMoneySerializer( - source='pricing_data.overall_min', allow_null=True, read_only=True - ), - True, + pricing_min = OptionalField( + serializer_class=InvenTree.serializers.InvenTreeMoneySerializer, + serializer_kwargs={ + 'source': 'pricing_data.overall_min', + 'allow_null': True, + 'read_only': True, + }, + default_include=True, filter_name='pricing', ) - pricing_max = enable_filter( - InvenTree.serializers.InvenTreeMoneySerializer( - source='pricing_data.overall_max', allow_null=True, read_only=True - ), - True, + + pricing_max = OptionalField( + serializer_class=InvenTree.serializers.InvenTreeMoneySerializer, + serializer_kwargs={ + 'source': 'pricing_data.overall_max', + 'allow_null': True, + 'read_only': True, + }, + default_include=True, filter_name='pricing', ) - pricing_updated = enable_filter( - FilterableDateTimeField( - source='pricing_data.updated', allow_null=True, read_only=True - ), - True, + + pricing_updated = OptionalField( + serializer_class=serializers.DateTimeField, + serializer_kwargs={ + 'source': 'pricing_data.updated', + 'allow_null': True, + 'read_only': True, + }, + default_include=True, filter_name='pricing', ) @@ -927,11 +950,15 @@ class PartSerializer( tags = common.filters.enable_tags_filter() - price_breaks = enable_filter( - PartSalePriceSerializer( - source='salepricebreaks', many=True, read_only=True, allow_null=True - ), - False, + price_breaks = OptionalField( + serializer_class=PartSalePriceSerializer, + serializer_kwargs={ + 'source': 'salepricebreaks', + 'many': True, + 'read_only': True, + 'allow_null': True, + }, + default_include=False, filter_name='price_breaks', prefetch_fields=['salepricebreaks'], ) @@ -1267,10 +1294,15 @@ class PartStocktakeSerializer( label=_('Part Description'), ) - part_detail = enable_filter( - PartBriefSerializer( - source='part', read_only=True, allow_null=True, many=False, pricing=False - ), + part_detail = OptionalField( + serializer_class=PartBriefSerializer, + serializer_kwargs={ + 'source': 'part', + 'read_only': True, + 'allow_null': True, + 'many': False, + 'pricing': False, + }, default_include=False, ) @@ -1595,7 +1627,7 @@ class BomItemSubstituteSerializer(InvenTree.serializers.InvenTreeModelSerializer model = BomItemSubstitute fields = ['pk', 'bom_item', 'part', 'part_detail'] - list_serializer_class = FilterableListSerializer + # list_serializer_class = FilterableListSerializer part_detail = PartBriefSerializer( source='part', read_only=True, many=False, pricing=False @@ -1697,9 +1729,15 @@ class BomItemSerializer( help_text=_('Select the parent assembly'), ) - substitutes = enable_filter( - BomItemSubstituteSerializer(many=True, read_only=True, allow_null=True), - False, + substitutes = OptionalField( + serializer_class=BomItemSubstituteSerializer, + serializer_kwargs={ + 'many': True, + 'read_only': True, + 'allow_null': True, + 'required': False, + }, + default_include=False, filter_name='substitutes', prefetch_fields=[ 'substitutes', @@ -1709,14 +1747,15 @@ class BomItemSerializer( ], ) - part_detail = enable_filter( - PartBriefSerializer( - source='part', - label=_('Assembly'), - many=False, - read_only=True, - allow_null=True, - ) + part_detail = OptionalField( + serializer_class=PartBriefSerializer, + serializer_kwargs={ + 'source': 'part', + 'label': _('Assembly'), + 'many': False, + 'read_only': True, + 'allow_null': True, + }, ) sub_part = serializers.PrimaryKeyRelatedField( @@ -1725,26 +1764,28 @@ class BomItemSerializer( help_text=_('Select the component part'), ) - sub_part_detail = enable_filter( - PartBriefSerializer( - source='sub_part', - label=_('Component'), - many=False, - read_only=True, - allow_null=True, - ), - True, + sub_part_detail = OptionalField( + serializer_class=PartBriefSerializer, + serializer_kwargs={ + 'source': 'sub_part', + 'label': _('Component'), + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=True, ) - category_detail = enable_filter( - CategorySerializer( - source='sub_part.category', - label=_('Category'), - many=False, - read_only=True, - allow_null=True, - ), - False, + category_detail = OptionalField( + serializer_class=CategorySerializer, + serializer_kwargs={ + 'source': 'sub_part.category', + 'label': _('Category'), + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=False, ) on_order = serializers.FloatField( @@ -1755,41 +1796,61 @@ class BomItemSerializer( label=_('In Production'), read_only=True, allow_null=True ) - can_build = enable_filter( - FilterableFloatField(label=_('Can Build'), read_only=True, allow_null=True), - True, + can_build = OptionalField( + serializer_class=serializers.FloatField, + serializer_kwargs={ + 'label': _('Can Build'), + 'read_only': True, + 'allow_null': True, + }, + default_include=True, ) # Cached pricing fields - pricing_min = enable_filter( - InvenTree.serializers.InvenTreeMoneySerializer( - source='sub_part.pricing_data.overall_min', allow_null=True, read_only=True - ), - True, + pricing_min = OptionalField( + serializer_class=InvenTree.serializers.InvenTreeMoneySerializer, + serializer_kwargs={ + 'source': 'sub_part.pricing_data.overall_min', + 'allow_null': True, + 'read_only': True, + }, + default_include=True, filter_name='pricing', ) - pricing_max = enable_filter( - InvenTree.serializers.InvenTreeMoneySerializer( - source='sub_part.pricing_data.overall_max', allow_null=True, read_only=True - ), - True, + + pricing_max = OptionalField( + serializer_class=InvenTree.serializers.InvenTreeMoneySerializer, + serializer_kwargs={ + 'source': 'sub_part.pricing_data.overall_max', + 'allow_null': True, + 'read_only': True, + }, + default_include=True, filter_name='pricing', ) - pricing_min_total = enable_filter( - InvenTree.serializers.InvenTreeMoneySerializer(allow_null=True, read_only=True), - True, + + pricing_min_total = OptionalField( + serializer_class=InvenTree.serializers.InvenTreeMoneySerializer, + serializer_kwargs={'allow_null': True, 'read_only': True}, + default_include=True, filter_name='pricing', ) - pricing_max_total = enable_filter( - InvenTree.serializers.InvenTreeMoneySerializer(allow_null=True, read_only=True), - True, + + pricing_max_total = OptionalField( + serializer_class=InvenTree.serializers.InvenTreeMoneySerializer, + serializer_kwargs={'allow_null': True, 'read_only': True}, + default_include=True, filter_name='pricing', ) - pricing_updated = enable_filter( - FilterableDateTimeField( - source='sub_part.pricing_data.updated', allow_null=True, read_only=True - ), - True, + + pricing_updated = OptionalField( + serializer_class=serializers.DateTimeField, + serializer_kwargs={ + 'source': 'sub_part.pricing_data.updated', + 'allow_null': True, + 'read_only': True, + }, + default_include=True, filter_name='pricing', ) @@ -1887,19 +1948,22 @@ class CategoryParameterTemplateSerializer( 'default_value', ] - template_detail = enable_filter( - common.serializers.ParameterTemplateSerializer( - source='template', many=False, read_only=True - ), - True, + template_detail = OptionalField( + serializer_class=common.serializers.ParameterTemplateSerializer, + serializer_kwargs={'source': 'template', 'many': False, 'read_only': True}, + default_include=True, prefetch_fields=['template'], ) - category_detail = enable_filter( - CategorySerializer( - source='category', many=False, read_only=True, allow_null=True - ), - True, + category_detail = OptionalField( + serializer_class=CategorySerializer, + serializer_kwargs={ + 'source': 'category', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=True, prefetch_fields=['category'], ) diff --git a/src/backend/InvenTree/part/test_api.py b/src/backend/InvenTree/part/test_api.py index 557d594f14..da8bada994 100644 --- a/src/backend/InvenTree/part/test_api.py +++ b/src/backend/InvenTree/part/test_api.py @@ -1406,6 +1406,53 @@ class PartAPITest(PartAPITestBase): assert_subset=True, ) + def test_pricing_info(self): + """Test annotation of 'pricing' detail against a Part instance.""" + part = Part.objects.first() + url = reverse('api-part-detail', kwargs={'pk': part.pk}) + + pricing_fields = ['pricing_min', 'pricing_max', 'pricing_updated'] + + for included in [True, False]: + response = self.get(url, {'pricing': included}, expected_code=200) + + for field in pricing_fields: + if included: + self.assertIn(field, response.data) + else: + self.assertNotIn(field, response.data) + + def test_parameters_info(self): + """Test annotation of 'parameters' detail against a Part instance.""" + part = Part.objects.first() + url = reverse('api-part-detail', kwargs={'pk': part.pk}) + + for included in [True, False]: + response = self.get(url, {'parameters': included}, expected_code=200) + + if included: + self.assertIn('parameters', response.data) + else: + self.assertNotIn('parameters', response.data) + + def test_category_detail(self): + """Test annotation of 'category_detail' against a Part instance.""" + part = Part.objects.get(pk=1) + url = reverse('api-part-detail', kwargs={'pk': part.pk}) + + for included in [True, False]: + response = self.get(url, {'category_detail': included}, expected_code=200) + + if not included: + self.assertNotIn('category_detail', response.data) + continue + + self.assertIn('category_detail', response.data) + category = response.data['category_detail'] + + for field in ['name', 'description', 'structural']: + self.assertIn(field, category) + class PartCreationTests(PartAPITestBase): """Tests for creating new Part instances via the API.""" @@ -2707,8 +2754,28 @@ class BomItemTest(InvenTreeAPITestCase): def test_get_bom_detail(self): """Get the detail view for a single BomItem object.""" - url = reverse('api-bom-item-detail', kwargs={'pk': 3}) + from part.models import BomItemSubstitute + bom_item = BomItem.objects.get(pk=3) + + # Create some substitutes for this BomItem + substitute_parts = Part.objects.filter(component=True).exclude( + pk=bom_item.sub_part.pk + )[:3] + + for part in substitute_parts: + BomItemSubstitute.objects.create(bom_item=bom_item, part=part) + + self.assertEqual(bom_item.substitutes.count(), 3) + + url = reverse('api-bom-item-detail', kwargs={'pk': bom_item.pk}) + + # First, get without substitutes + response = self.get(url, expected_code=200) + + self.assertNotIn('substitutes', response.data) + + # Now, get with substitutes response = self.get(url, {'substitutes': True}, expected_code=200) expected_values = [ @@ -2735,6 +2802,15 @@ class BomItemTest(InvenTreeAPITestCase): self.assertEqual(int(float(response.data['quantity'])), 25) + # Look at the substitutes data + subs = response.data['substitutes'] + + self.assertEqual(len(subs), 3) + + for sub in subs: + for field in ['pk', 'part', 'bom_item', 'part_detail']: + self.assertIn(field, sub) + # Increase the quantity data = response.data data['quantity'] = 57 diff --git a/src/backend/InvenTree/part/test_bom_item.py b/src/backend/InvenTree/part/test_bom_item.py index 7c3e40fb70..d2e8d91b91 100644 --- a/src/backend/InvenTree/part/test_bom_item.py +++ b/src/backend/InvenTree/part/test_bom_item.py @@ -390,3 +390,83 @@ class BomItemTest(TestCase): # Delete the new BOM item bom_item.delete() + + def test_bom_validated(self): + """Test for caching of 'bom_validated' property.""" + from part.tasks import validate_bom + + assembly = Part.objects.create( + name='Assembly1', description='An assembly part', assembly=True + ) + + assembly_2 = Part.objects.create( + name='Assembly2', description='An assembly part', assembly=True + ) + + def check(valid: bool = True): + """Helper function to check the BOM for this assembly.""" + nonlocal assembly + assembly.refresh_from_db() + self.assertEqual(assembly.bom_validated, valid) + + def validate(valid: bool = True): + """Helper function to validate the BOM for this assembly.""" + nonlocal assembly + validate_bom(assembly.pk, valid) + check(valid) + + check(valid=False) + validate() + + sub_part_1 = Part.objects.create( + name='SubPart1', description='A sub-part', component=True + ) + + sub_part_2 = Part.objects.create( + name='SubPart2', description='A sub-part', component=True + ) + + # Still valid at this stage - we have not made any changes to the BOM + check(valid=True) + + # Creating a *new* BOM item should invalidate the bom_validated cache + bom_item = BomItem.objects.create( + part=assembly, sub_part=sub_part_1, quantity=1 + ) + + check(valid=False) + + # Editing the BOM item should also invalidate the bom_validated cache + validate() + bom_item.quantity = 2 + bom_item.save() + check(valid=False) + + # Editing the BOM item without changing any relevant fields should not invalidate the bom_validated cache + validate() + bom_item.description = 'This is a description' + bom_item.save() + check(valid=True) + + # Point the BOM item to a different component + validate() + bom_item.sub_part = sub_part_2 + bom_item.save() + check(valid=False) + + # Point the BOM to a different assembly + validate() + bom_item.part = assembly_2 + bom_item.save() + check(valid=False) + + # Check a partial restore - returning to previous state should re-validate + bom_item.part = assembly + bom_item.save() + check(valid=True) + + # Now, delete the BomItem entirely + bom_item.delete() + check(valid=False) + + self.assertIsNotNone(assembly.bom_checked_date) diff --git a/src/backend/InvenTree/plugin/api.py b/src/backend/InvenTree/plugin/api.py index 91580062b3..9093d6e7f4 100644 --- a/src/backend/InvenTree/plugin/api.py +++ b/src/backend/InvenTree/plugin/api.py @@ -210,6 +210,7 @@ class PluginInstall(CreateAPI): queryset = PluginConfig.objects.none() serializer_class = PluginSerializers.PluginConfigInstallSerializer + permission_classes = [InvenTree.permissions.IsSuperuserOrSuperScope] def create(self, request, *args, **kwargs): """Install a plugin via the API.""" diff --git a/src/backend/InvenTree/plugin/installer.py b/src/backend/InvenTree/plugin/installer.py index 96278f4efb..ba7232b47a 100644 --- a/src/backend/InvenTree/plugin/installer.py +++ b/src/backend/InvenTree/plugin/installer.py @@ -236,8 +236,8 @@ def install_plugin( url: Optional URL to install from version: Optional version specifier """ - if not user or not user.is_staff: - raise ValidationError(_('Only staff users can administer plugins')) + if user and not user.is_superuser: + raise ValidationError(_('Only superuser accounts can administer plugins')) if settings.PLUGINS_INSTALL_DISABLED: raise ValidationError(_('Plugin installation is disabled')) @@ -270,8 +270,12 @@ def install_plugin( if version: package_ref = f'{packagename}=={version}' else: - raise ValidationError(_('No package name or URL provided')) + raise ValidationError(_('No package name or URL provided for installation')) + # Sanitize the package name for installation + if any(c in package_ref for c in ';&|`$()'): + raise ValidationError(_('Invalid characters in package name or URL')) + # Execute installation via pip cmd: list[str] = ['install', '-U', '--disable-pip-version-check'] if index_url: @@ -337,6 +341,9 @@ def uninstall_plugin(cfg: plugin.models.PluginConfig, user=None, delete_config=T """ from plugin.registry import registry + if user and not user.is_superuser: + raise ValidationError(_('Only superuser accounts can administer plugins')) + if settings.PLUGINS_INSTALL_DISABLED: raise ValidationError(_('Plugin uninstalling is disabled')) diff --git a/src/backend/InvenTree/plugin/serializers.py b/src/backend/InvenTree/plugin/serializers.py index 5fbff385b4..b12d0d3590 100644 --- a/src/backend/InvenTree/plugin/serializers.py +++ b/src/backend/InvenTree/plugin/serializers.py @@ -165,6 +165,9 @@ class PluginConfigInstallSerializer(serializers.Serializer): version = data.get('version', None) user = self.context['request'].user + if not user or not user.is_superuser: + raise ValidationError(_('Only superuser accounts can administer plugins')) + return install_plugin( url=url, packagename=packagename, version=version, user=user ) @@ -266,10 +269,13 @@ class PluginUninstallSerializer(serializers.Serializer): """Uninstall the specified plugin.""" from plugin.installer import uninstall_plugin + user = self.context['request'].user + + if not user or not user.is_superuser: + raise ValidationError(_('Only superuser accounts can administer plugins')) + return uninstall_plugin( - instance, - user=self.context['request'].user, - delete_config=validated_data.get('delete_config', True), + instance, user=user, delete_config=validated_data.get('delete_config', True) ) diff --git a/src/backend/InvenTree/plugin/test_api.py b/src/backend/InvenTree/plugin/test_api.py index 6dfb3d3f8f..4f9872d2a0 100644 --- a/src/backend/InvenTree/plugin/test_api.py +++ b/src/backend/InvenTree/plugin/test_api.py @@ -63,6 +63,21 @@ class PluginDetailAPITest(PluginMixin, InvenTreeAPITestCase): """Test the plugin install command.""" url = reverse('api-plugin-install') + # Requires superuser permissions + self.user.is_superuser = False + self.user.save() + + self.post( + url, + {'confirm': True, 'packagename': self.PKG_NAME}, + expected_code=403, + max_query_time=30, + ) + + # Provide superuser permissions + self.user.is_superuser = True + self.user.save() + # invalid package name data = self.post( url, @@ -229,7 +244,7 @@ class PluginDetailAPITest(PluginMixin, InvenTreeAPITestCase): test_plg.refresh_from_db() self.assertTrue(test_plg.is_active()) - def test_pluginCfg_delete(self): + def test_plugin_config_delete(self): """Test deleting a config.""" test_plg = self.plugin_confs.first() assert test_plg is not None diff --git a/src/backend/InvenTree/plugin/test_plugin.py b/src/backend/InvenTree/plugin/test_plugin.py index 2d7c3eba04..c918eadc3d 100644 --- a/src/backend/InvenTree/plugin/test_plugin.py +++ b/src/backend/InvenTree/plugin/test_plugin.py @@ -11,11 +11,14 @@ from typing import Optional from unittest import mock from unittest.mock import patch +from django.contrib.auth.models import User +from django.core.exceptions import ValidationError from django.test import TestCase, override_settings import plugin.templatetags.plugin_extras as plugin_tags from InvenTree.unit_test import PluginRegistryMixin, TestQueryMixin from plugin import InvenTreePlugin, PluginMixinEnum +from plugin.installer import install_plugin from plugin.registry import registry from plugin.samples.integration.another_sample import ( NoIntegrationPlugin, @@ -326,6 +329,9 @@ class RegistryTests(TestQueryMixin, PluginRegistryMixin, TestCase): def test_broken_samples(self): """Test that the broken samples trigger reloads.""" + # Reset the registry to a known state + registry.errors = {} + # In the base setup there are no errors self.assertEqual(len(registry.errors), 0) @@ -686,3 +692,40 @@ class RegistryTests(TestQueryMixin, PluginRegistryMixin, TestCase): self.assertTrue(cfg.is_builtin()) self.assertFalse(cfg.is_package()) self.assertFalse(cfg.is_sample()) + + +class InstallerTests(TestCase): + """Tests for the plugin installer code.""" + + def test_plugin_install_errors(self): + """Test error handling for plugin installation.""" + # No data provided + with self.assertRaises(ValidationError) as e: + install_plugin() + + self.assertIn( + 'No package name or URL provided for installation', str(e.exception) + ) + + # Invalid package name + for pkg in [ + 'invalid;name', + 'invalid&name', + 'invalid|name', + 'invalid`name', + 'invalid$(name)', + ]: + with self.assertRaises(ValidationError) as e: + install_plugin(packagename=pkg) + + self.assertIn('Invalid characters in package name or URL', str(e.exception)) + + # Non superuser account + user = User.objects.create(username='my-user', is_superuser=False) + + with self.assertRaises(ValidationError) as e: + install_plugin(user=user, packagename='some-package') + + self.assertIn( + 'Only superuser accounts can administer plugins', str(e.exception) + ) diff --git a/src/backend/InvenTree/report/api.py b/src/backend/InvenTree/report/api.py index a02bfe74ae..6eebee27f6 100644 --- a/src/backend/InvenTree/report/api.py +++ b/src/backend/InvenTree/report/api.py @@ -224,23 +224,27 @@ class LabelPrint(GenericAPIView): return Response(DataOutputSerializer(output).data, status=201) -class LabelTemplateList(TemplatePermissionMixin, ListCreateAPI): +class LabelTemplateMixin: + """Mixin class for label template API views.""" + + queryset = report.models.LabelTemplate.objects.all().prefetch_related('updated_by') + serializer_class = report.serializers.LabelTemplateSerializer + + +class LabelTemplateList(TemplatePermissionMixin, LabelTemplateMixin, 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): +class LabelTemplateDetail( + TemplatePermissionMixin, LabelTemplateMixin, 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.""" @@ -300,23 +304,27 @@ class ReportPrint(GenericAPIView): return Response(DataOutputSerializer(output).data, status=201) -class ReportTemplateList(TemplatePermissionMixin, ListCreateAPI): +class ReportTemplateMixin: + """Mixin class for report template API views.""" + + queryset = report.models.ReportTemplate.objects.all().prefetch_related('updated_by') + serializer_class = report.serializers.ReportTemplateSerializer + + +class ReportTemplateList(TemplatePermissionMixin, ReportTemplateMixin, ListCreateAPI): """API endpoint for viewing list of ReportTemplate objects.""" - 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 ReportTemplateDetail(TemplatePermissionMixin, RetrieveUpdateDestroyAPI): +class ReportTemplateDetail( + TemplatePermissionMixin, ReportTemplateMixin, RetrieveUpdateDestroyAPI +): """Detail API endpoint for report template model.""" - queryset = report.models.ReportTemplate.objects.all() - serializer_class = report.serializers.ReportTemplateSerializer - class ReportSnippetList(TemplatePermissionMixin, ListCreateAPI): """API endpoint for listing ReportSnippet objects.""" diff --git a/src/backend/InvenTree/report/migrations/0032_labeltemplate_updated_labeltemplate_updated_by_and_more.py b/src/backend/InvenTree/report/migrations/0032_labeltemplate_updated_labeltemplate_updated_by_and_more.py new file mode 100644 index 0000000000..aaf2c9024e --- /dev/null +++ b/src/backend/InvenTree/report/migrations/0032_labeltemplate_updated_labeltemplate_updated_by_and_more.py @@ -0,0 +1,64 @@ +# Generated by Django 5.2.12 on 2026-04-09 01:13 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("report", "0031_reporttemplate_merge"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name="labeltemplate", + name="updated", + field=models.DateTimeField( + blank=True, + default=None, + help_text="Timestamp of last update", + null=True, + verbose_name="Updated", + ), + ), + migrations.AddField( + model_name="labeltemplate", + name="updated_by", + field=models.ForeignKey( + blank=True, + help_text="User who last updated this object", + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated", + to=settings.AUTH_USER_MODEL, + verbose_name="Update By", + ), + ), + migrations.AddField( + model_name="reporttemplate", + name="updated", + field=models.DateTimeField( + blank=True, + default=None, + help_text="Timestamp of last update", + null=True, + verbose_name="Updated", + ), + ), + migrations.AddField( + model_name="reporttemplate", + name="updated_by", + field=models.ForeignKey( + blank=True, + help_text="User who last updated this object", + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated", + to=settings.AUTH_USER_MODEL, + verbose_name="Update By", + ), + ), + ] diff --git a/src/backend/InvenTree/report/models.py b/src/backend/InvenTree/report/models.py index 8ab0168899..1593ae03f9 100644 --- a/src/backend/InvenTree/report/models.py +++ b/src/backend/InvenTree/report/models.py @@ -27,7 +27,7 @@ import InvenTree.helpers import InvenTree.models import report.helpers import report.validators -from common.models import DataOutput, RenderChoices +from common.models import DataOutput, RenderChoices, UpdatedUserMixin from common.settings import get_global_setting from InvenTree.helpers_model import get_base_url from InvenTree.models import MetadataMixin @@ -189,7 +189,9 @@ class ReportContextExtension(TypedDict): merge: bool -class ReportTemplateBase(MetadataMixin, InvenTree.models.InvenTreeModel): +class ReportTemplateBase( + MetadataMixin, UpdatedUserMixin, InvenTree.models.InvenTreeModel +): """Base class for reports, labels.""" class ModelChoices(RenderChoices): @@ -205,8 +207,9 @@ class ReportTemplateBase(MetadataMixin, InvenTree.models.InvenTreeModel): def save(self, *args, **kwargs): """Perform additional actions when the report is saved.""" - # Increment revision number - self.revision += 1 + if kwargs.pop('increment_revision', True): + # Increment revision number + self.revision += 1 super().save() diff --git a/src/backend/InvenTree/report/serializers.py b/src/backend/InvenTree/report/serializers.py index 5cf2e37e6b..1845724257 100644 --- a/src/backend/InvenTree/report/serializers.py +++ b/src/backend/InvenTree/report/serializers.py @@ -11,6 +11,7 @@ from InvenTree.serializers import ( InvenTreeAttachmentSerializerField, InvenTreeModelSerializer, ) +from users.serializers import UserSerializer class ReportSerializerBase(InvenTreeModelSerializer): @@ -27,6 +28,21 @@ class ReportSerializerBase(InvenTreeModelSerializer): if len(self.fields['model_type'].choices) == 0: self.fields['model_type'].choices = report.helpers.report_model_options() + def save(self, **kwargs): + """Override the save method to capture the user information.""" + user = self.context.get('request').user + + if not user or not user.is_authenticated: + raise PermissionError( + _('User must be authenticated to save report templates') + ) + + instance = super().save(**kwargs) + instance.updated_by = user + instance.save(increment_revision=False) + + return instance + @staticmethod def base_fields(): """Base serializer field set.""" @@ -41,6 +57,9 @@ class ReportSerializerBase(InvenTreeModelSerializer): 'enabled', 'revision', 'attach_to_model', + 'updated', + 'updated_by', + 'updated_by_detail', ] template = InvenTreeAttachmentSerializerField(required=True) @@ -56,6 +75,10 @@ class ReportSerializerBase(InvenTreeModelSerializer): allow_null=False, ) + updated_by_detail = UserSerializer( + source='updated_by', read_only=True, allow_null=True, many=False + ) + class ReportTemplateSerializer(ReportSerializerBase): """Serializer class for report template model.""" diff --git a/src/backend/InvenTree/report/templatetags/report.py b/src/backend/InvenTree/report/templatetags/report.py index 748ac65c7a..330aa1980f 100644 --- a/src/backend/InvenTree/report/templatetags/report.py +++ b/src/backend/InvenTree/report/templatetags/report.py @@ -473,10 +473,10 @@ def parameter( Arguments: instance: A Model object - parameter_name: The name of the parameter to retrieve + parameter_name: The name of the parameter to retrieve (case insensitive) Returns: - A Parameter object, or None if not found + A Parameter object, or the provided default value if not found """ if instance is None: raise ValueError('parameter tag requires a valid Model instance') @@ -484,12 +484,46 @@ def parameter( if not isinstance(instance, Model) or not hasattr(instance, 'parameters'): raise TypeError("parameter tag requires a Model with 'parameters' attribute") - return ( - instance.parameters + # First try with exact match + if ( + parameter := instance.parameters .prefetch_related('template') .filter(template__name=parameter_name) .first() - ) + ): + return parameter + + # Next, try with case-insensitive match + if ( + parameter := instance.parameters + .prefetch_related('template') + .filter(template__name__iexact=parameter_name) + .first() + ): + return parameter + + return None + + +@register.simple_tag() +def parameter_value( + instance: Model, parameter_name: str, backup_value: Optional[Any] = None +) -> str: + """Return the value of a Parameter for the given part and parameter name. + + Arguments: + instance: A Model object + parameter_name: The name of the parameter to retrieve (case insensitive) + backup_value: A backup value to return if the parameter is not found + + Returns: + The value of the Parameter, or the backup_value if not found + """ + if param := parameter(instance, parameter_name): + return param.data + + # If the matching parameter is not found, return the backup value + return backup_value @register.simple_tag() @@ -1002,3 +1036,196 @@ def include_icon_fonts(ttf: bool = False, woff: bool = False): """ return mark_safe(icon_class + '\n'.join(fonts)) + + +@register.simple_tag() +def lowercase(value: str) -> str: + """Convert a string to lowercase. + + Arguments: + value: The string to be converted + """ + if not value: + return '' + return str(value).lower() + + +@register.simple_tag() +def uppercase(value: str) -> str: + """Convert a string to uppercase. + + Arguments: + value: The string to be converted + """ + if not value: + return '' + return str(value).upper() + + +@register.simple_tag() +def titlecase(value: str) -> str: + """Convert a string to title case. + + Arguments: + value: The string to be converted + """ + if not value: + return '' + return str(value).title() + + +@register.simple_tag() +def strip(value: str, chars: Optional[str] = ' ') -> str: + """Strip leading and trailing characters from a string. + + Arguments: + value: The string to be stripped + chars: The set of characters to strip from the string (default = whitespace) + """ + if not value: + return '' + return str(value).strip(chars) + + +@register.simple_tag() +def lstrip(value: str, chars: Optional[str] = ' ') -> str: + """Strip leading characters from a string. + + Arguments: + value: The string to be stripped + chars: The set of characters to strip from the string (default = whitespace) + """ + if not value: + return '' + return str(value).lstrip(chars) + + +@register.simple_tag() +def rstrip(value: str, chars: Optional[str] = ' ') -> str: + """Strip trailing characters from a string. + + Arguments: + value: The string to be stripped + chars: The set of characters to strip from the string (default = whitespace) + """ + if not value: + return '' + return str(value).rstrip(chars) + + +@register.simple_tag() +def split(value: str, separator: str = ',') -> list: + """Split a string into a list, using the provided separator (default = ','). + + Arguments: + value: The string to be split + separator: The character to use as a separator (default = ',') + """ + if not value: + return [] + return [v.strip() for v in str(value).split(separator)] + + +@register.simple_tag() +def join(value: list, separator: str = ',') -> str: + """Join a list of items into a string, using the provided separator (default = ','). + + Arguments: + value: The list of items to be joined + separator: The character to use as a separator (default = ',') + """ + if not value: + return '' + return separator.join(str(v) for v in value) + + +@register.simple_tag() +def length(value: Any) -> int: + """Return the length of a list or string. + + Arguments: + value: The value to be measured (e.g. a list or string) + """ + if value is None: + return 0 + try: + return len(value) + except TypeError: + return 0 + + +@register.simple_tag() +def replace(value: str, old: str, new: str = '') -> str: + """Replace occurrences of a substring within a string with a new value. + + Arguments: + value: The original string + old: The substring to be replaced + new: The value to replace the old substring with (default = "") + """ + if not value: + return '' + return str(value).replace(old, new) + + +@register.simple_tag() +def first(value: list, default: Any = None) -> Any: + """Return the first item in a list, or a default value if the list is empty. + + Arguments: + value: The list from which to retrieve the first item + default: The value to return if the list is empty (default = None) + """ + if not value: + return default + try: + return value[0] + except (IndexError, TypeError): + return default + + +@register.simple_tag() +def last(value: list, default: Any = None) -> Any: + """Return the last item in a list, or a default value if the list is empty. + + Arguments: + value: The list from which to retrieve the last item + default: The value to return if the list is empty (default = None) + """ + if not value: + return default + try: + return value[-1] + except (IndexError, TypeError): + return default + + +@register.simple_tag() +def reverse(value: list) -> list: + """Return a reversed version of the provided list. + + Arguments: + value: The list to be reversed + """ + if not value: + return [] + try: + return value[::-1] + except TypeError: + return [] + + +@register.simple_tag() +def truncate(value: list, length: int) -> list: + """Return a truncated version of the provided list. + + Arguments: + value: The list to be truncated + length: The maximum length of the returned list + """ + if not value: + return [] + try: + return value[:length] + except TypeError: + return [] diff --git a/src/backend/InvenTree/report/test_tags.py b/src/backend/InvenTree/report/test_tags.py index abee2b09c8..d8c4df23aa 100644 --- a/src/backend/InvenTree/report/test_tags.py +++ b/src/backend/InvenTree/report/test_tags.py @@ -231,6 +231,47 @@ class ReportTagTest(PartImageTestMixin, InvenTreeTestCase): logo = report_tags.logo_image() self.assertIn('inventree.png', logo) + def test_string_tags(self): + """Simple tests for the string manipulation tags.""" + self.assertEqual(report_tags.uppercase('hello world'), 'HELLO WORLD') + self.assertEqual(report_tags.lowercase('HELLO WORLD'), 'hello world') + self.assertEqual(report_tags.titlecase('hello world'), 'Hello World') + + self.assertEqual(report_tags.strip(' hello world '), 'hello world') # noqa: B005 + self.assertEqual(report_tags.strip(' hello world ', chars=' hd'), 'ello worl') # noqa: B005 + self.assertEqual(report_tags.strip('xxhelloxx', chars='xy'), 'hello') # noqa: B005 + + self.assertEqual(report_tags.lstrip(' hello world '), 'hello world ') # noqa: B005 + self.assertEqual(report_tags.rstrip(' world ', chars=' dl'), ' wor') # noqa: B005 + + self.assertEqual(report_tags.split('a,b,c', separator=','), ['a', 'b', 'c']) + self.assertEqual(report_tags.split('a,|,b|c', separator='|'), ['a,', ',b', 'c']) + + self.assertEqual(report_tags.join(['a', 'b', 'c'], separator=','), 'a,b,c') + self.assertEqual(report_tags.join(['a', 'b', 'c'], separator='|'), 'a|b|c') + self.assertEqual(report_tags.join(None, separator=','), '') + + self.assertEqual(report_tags.replace('hello world', 'world'), 'hello ') + self.assertEqual( + report_tags.replace('hello world', 'world', 'there'), 'hello there' + ) + + self.assertEqual(report_tags.first('hello world'), 'h') + self.assertEqual(report_tags.last('hello world'), 'd') + self.assertEqual(report_tags.length('hello world'), 11) + self.assertEqual(report_tags.truncate('hello world', length=3), 'hel') + self.assertEqual(report_tags.reverse('hello world'), 'dlrow olleh') + + def test_list_tags(self): + """Simple tests for list manipulation tags.""" + self.assertEqual(report_tags.first([1, 2, 3]), 1) + self.assertEqual(report_tags.last([1, 2, 3]), 3) + self.assertEqual(report_tags.length([1, 2, 3]), 3) + self.assertEqual(report_tags.reverse([1, 2, 3]), [3, 2, 1]) + self.assertEqual(report_tags.truncate([1, 2, 3], 2), [1, 2]) + self.assertEqual(report_tags.join([1, 2, 3], separator=','), '1,2,3') + self.assertEqual(report_tags.join(None, separator=','), '') + def test_maths_tags(self): """Simple tests for mathematical operator tags.""" self.assertEqual(report_tags.add(1, 2), 3) diff --git a/src/backend/InvenTree/stock/serializers.py b/src/backend/InvenTree/stock/serializers.py index 5aa339e340..35a5885430 100644 --- a/src/backend/InvenTree/stock/serializers.py +++ b/src/backend/InvenTree/stock/serializers.py @@ -33,10 +33,10 @@ from generic.states.fields import InvenTreeCustomStatusSerializerMixin from importer.registry import register_importer from InvenTree.mixins import DataImportExportSerializerMixin from InvenTree.serializers import ( - FilterableListField, InvenTreeCurrencySerializer, InvenTreeDecimalField, - enable_filter, + OptionalField, + TreePathSerializer, ) from users.serializers import UserSerializer @@ -231,8 +231,9 @@ class StockItemTestResultSerializer( self.fields['user'].read_only = True self.fields['date'].read_only = True - user_detail = enable_filter( - UserSerializer(source='user', read_only=True, allow_null=True), + user_detail = OptionalField( + serializer_class=UserSerializer, + serializer_kwargs={'source': 'user', 'read_only': True, 'allow_null': True}, prefetch_fields=['user'], ) @@ -245,10 +246,9 @@ class StockItemTestResultSerializer( label=_('Test template for this result'), ) - template_detail = enable_filter( - part_serializers.PartTestTemplateSerializer( - source='template', read_only=True, allow_null=True - ), + template_detail = OptionalField( + serializer_class=part_serializers.PartTestTemplateSerializer, + serializer_kwargs={'source': 'template', 'read_only': True, 'allow_null': True}, prefetch_fields=['template'], ) @@ -377,20 +377,20 @@ class StockItemSerializer( 'purchase_price_currency', 'use_pack_size', 'serial_numbers', - 'tests', # Annotated fields 'allocated', 'expired', 'installed_items', 'child_items', - 'location_path', 'stale', - 'tracking_items', - 'tags', - # Detail fields (FK relationships) - 'supplier_part_detail', - 'part_detail', + # Optional fields (FK relationships) 'location_detail', + 'location_path', + 'part_detail', + 'supplier_part_detail', + 'tags', + 'tests', + 'tracking_items', ] read_only_fields = [ 'allocated', @@ -428,13 +428,16 @@ class StockItemSerializer( help_text=_('Parent stock item'), ) - location_path = enable_filter( - FilterableListField( - child=serializers.DictField(), - source='location.get_path', - read_only=True, - allow_null=True, - ), + location_path = OptionalField( + serializer_class=TreePathSerializer, + serializer_kwargs={ + 'source': 'location.get_path', + 'extra_fields': ['icon'], + 'many': True, + 'read_only': True, + 'allow_null': True, + }, + default_include=False, filter_name='path_detail', ) @@ -577,19 +580,20 @@ class StockItemSerializer( ) # Optional detail fields, which can be appended via query parameters - supplier_part_detail = enable_filter( - company_serializers.SupplierPartSerializer( - label=_('Supplier Part'), - source='supplier_part', - brief=True, - supplier_detail=False, - manufacturer_detail=False, - part_detail=False, - many=False, - read_only=True, - allow_null=True, - ), - False, + supplier_part_detail = OptionalField( + serializer_class=company_serializers.SupplierPartSerializer, + serializer_kwargs={ + 'label': _('Supplier Part'), + 'source': 'supplier_part', + 'brief': True, + 'supplier_detail': False, + 'manufacturer_detail': False, + 'part_detail': False, + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=False, prefetch_fields=[ 'supplier_part__supplier', 'supplier_part__purchase_order_line_items', @@ -597,30 +601,40 @@ class StockItemSerializer( ], ) - part_detail = enable_filter( - part_serializers.PartBriefSerializer( - label=_('Part'), source='part', many=False, read_only=True, allow_null=True - ), - True, + part_detail = OptionalField( + serializer_class=part_serializers.PartBriefSerializer, + serializer_kwargs={ + 'label': _('Part'), + 'source': 'part', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=True, ) - location_detail = enable_filter( - LocationBriefSerializer( - label=_('Location'), - source='location', - many=False, - read_only=True, - allow_null=True, - ), - False, + location_detail = OptionalField( + serializer_class=LocationBriefSerializer, + serializer_kwargs={ + 'label': _('Location'), + 'source': 'location', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=False, prefetch_fields=['location'], ) - tests = enable_filter( - StockItemTestResultSerializer( - source='test_results', many=True, read_only=True, allow_null=True - ), - False, + tests = OptionalField( + serializer_class=StockItemTestResultSerializer, + serializer_kwargs={ + 'source': 'test_results', + 'many': True, + 'read_only': True, + 'allow_null': True, + }, + default_include=False, prefetch_fields=[ 'test_results', 'test_results__user', @@ -1222,13 +1236,16 @@ class LocationSerializer( tags = common.filters.enable_tags_filter() - path = enable_filter( - FilterableListField( - child=serializers.DictField(), - source='get_path', - read_only=True, - allow_null=True, - ), + path = OptionalField( + serializer_class=TreePathSerializer, + serializer_kwargs={ + 'many': True, + 'source': 'get_path', + 'extra_fields': ['icon'], + 'read_only': True, + 'allow_null': True, + }, + default_include=False, filter_name='path_detail', ) @@ -1273,21 +1290,37 @@ class StockTrackingSerializer( label = serializers.CharField(read_only=True) - item_detail = enable_filter( - StockItemSerializer(source='item', many=False, read_only=True, allow_null=True), + item_detail = OptionalField( + serializer_class=StockItemSerializer, + serializer_kwargs={ + 'source': 'item', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, prefetch_fields=['item', 'item__part'], ) - part_detail = enable_filter( - part_serializers.PartBriefSerializer( - source='part', many=False, read_only=True, allow_null=True - ), + part_detail = OptionalField( + serializer_class=part_serializers.PartBriefSerializer, + serializer_kwargs={ + 'source': 'part', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, default_include=False, prefetch_fields=['part'], ) - user_detail = enable_filter( - UserSerializer(source='user', many=False, read_only=True, allow_null=True), + user_detail = OptionalField( + serializer_class=UserSerializer, + serializer_kwargs={ + 'source': 'user', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, prefetch_fields=['user'], ) diff --git a/src/backend/InvenTree/users/api.py b/src/backend/InvenTree/users/api.py index 37434fbcff..6e07f35c77 100644 --- a/src/backend/InvenTree/users/api.py +++ b/src/backend/InvenTree/users/api.py @@ -256,7 +256,7 @@ class UserList(ListCreateAPI): - Otherwise authenticated users have read-only access """ - queryset = User.objects.all() + queryset = User.objects.all().prefetch_related('groups') serializer_class = UserCreateSerializer # User must have the right role, AND be a staff user, else read-only diff --git a/src/backend/InvenTree/users/serializers.py b/src/backend/InvenTree/users/serializers.py index 284b4611d3..417a863ae3 100644 --- a/src/backend/InvenTree/users/serializers.py +++ b/src/backend/InvenTree/users/serializers.py @@ -11,11 +11,9 @@ from rest_framework import serializers from rest_framework.exceptions import PermissionDenied from InvenTree.serializers import ( - FilterableListSerializer, - FilterableSerializerMethodField, FilterableSerializerMixin, InvenTreeModelSerializer, - enable_filter, + OptionalField, ) from .models import ApiToken, Owner, RuleSet, UserProfile @@ -56,7 +54,6 @@ class RuleSetSerializer(InvenTreeModelSerializer): 'can_delete', ] read_only_fields = ['pk', 'name', 'label', 'group'] - list_serializer_class = FilterableListSerializer class RoleSerializer(InvenTreeModelSerializer): @@ -185,7 +182,6 @@ class UserSerializer(InvenTreeModelSerializer): model = User fields = ['pk', 'username', 'first_name', 'last_name', 'email'] read_only_fields = ['username', 'email'] - list_serializer_class = FilterableListSerializer username = serializers.CharField(label=_('Username'), help_text=_('Username')) @@ -238,8 +234,21 @@ class ApiTokenSerializer(InvenTreeModelSerializer): def validate(self, data): """Validate the data for the serializer.""" + request_user = self.context['request'].user + if not request_user: + raise serializers.ValidationError( + _('User must be authenticated') + ) # pragma: no cover + if 'user' not in data: - data['user'] = self.context['request'].user + data['user'] = request_user + + # Only superusers can create tokens for other users + if data['user'] != request_user and not request_user.is_superuser: + raise serializers.ValidationError( + _('Only a superuser can create a token for another user') + ) + return super().validate(data) user_detail = UserSerializer(source='user', read_only=True) @@ -254,8 +263,9 @@ class GroupSerializer(FilterableSerializerMixin, InvenTreeModelSerializer): model = Group fields = ['pk', 'name', 'permissions', 'roles', 'users'] - permissions = enable_filter( - FilterableSerializerMethodField(allow_null=True, read_only=True), + permissions = OptionalField( + serializer_class=serializers.SerializerMethodField, + serializer_kwargs={'allow_null': True, 'read_only': True}, filter_name='permission_detail', ) @@ -263,16 +273,26 @@ class GroupSerializer(FilterableSerializerMixin, InvenTreeModelSerializer): """Return a list of permissions associated with the group.""" return generate_permission_dict(group.permissions.all()) - roles = enable_filter( - RuleSetSerializer( - source='rule_sets', many=True, read_only=True, allow_null=True - ), + roles = OptionalField( + serializer_class=RuleSetSerializer, + serializer_kwargs={ + 'source': 'rule_sets', + 'many': True, + 'read_only': True, + 'allow_null': True, + }, filter_name='role_detail', prefetch_fields=['rule_sets'], ) - users = enable_filter( - UserSerializer(source='user_set', many=True, read_only=True, allow_null=True), + users = OptionalField( + serializer_class=UserSerializer, + serializer_kwargs={ + 'source': 'user_set', + 'many': True, + 'read_only': True, + 'allow_null': True, + }, filter_name='user_detail', prefetch_fields=['user_set'], ) @@ -380,6 +400,9 @@ class MeUserSerializer(ExtendedUserSerializer): but ensures that certain fields are read-only. """ + # Remove the 'group_ids' field, as this is not relevant for the 'me' endpoint + fields = [f for f in ExtendedUserSerializer.Meta.fields if f != 'group_ids'] + read_only_fields = [ *ExtendedUserSerializer.Meta.read_only_fields, 'is_active', @@ -389,6 +412,28 @@ class MeUserSerializer(ExtendedUserSerializer): profile = UserProfileSerializer(many=False, read_only=True) + # Redefine the fields from ExtendedUserSerializer, to ensure they are marked as read-only + is_staff = serializers.BooleanField( + label=_('Staff'), + help_text=_('Does this user have staff permissions'), + required=False, + read_only=True, + ) + + is_superuser = serializers.BooleanField( + label=_('Superuser'), + help_text=_('Is this user a superuser'), + required=False, + read_only=True, + ) + + is_active = serializers.BooleanField( + label=_('Active'), + help_text=_('Is this user account active'), + required=False, + read_only=True, + ) + def make_random_password(length=14): """Generate a random password of given length.""" diff --git a/src/backend/InvenTree/users/test_api.py b/src/backend/InvenTree/users/test_api.py index 54c4ddfa3a..c3acd2de0b 100644 --- a/src/backend/InvenTree/users/test_api.py +++ b/src/backend/InvenTree/users/test_api.py @@ -44,7 +44,7 @@ class UserAPITests(InvenTreeAPITestCase): ) def test_api_url(self): - """Test the 'api_url attribute in related API endpoints. + """Test the 'api_url' attribute in related API endpoints. Ref: https://github.com/inventree/InvenTree/pull/10182 """ @@ -129,6 +129,19 @@ class UserAPITests(InvenTreeAPITestCase): self.assertIn('Only a superuser can adjust this field', str(response.data)) + # Try again, but with superuser access + self.user.is_superuser = True + self.user.save() + + response = self.post( + url, + data={**data, 'username': 'Superuser', 'is_superuser': True}, + expected_code=201, + ) + + self.assertEqual(response.data['username'], 'Superuser') + self.assertEqual(response.data['is_superuser'], True) + def test_user_detail(self): """Test the UserDetail API endpoint.""" user = User.objects.first() @@ -143,7 +156,7 @@ class UserAPITests(InvenTreeAPITestCase): self.get(url, expected_code=200) # Let's try to update the user - data = {'is_active': False, 'is_staff': False} + data = {'is_active': True, 'is_staff': False} self.patch(url, data=data, expected_code=403) @@ -158,6 +171,26 @@ class UserAPITests(InvenTreeAPITestCase): self.patch(url, data=data, expected_code=200) + # Try to change the "is_superuser" field - only a superuser can do this + data['is_superuser'] = True + response = self.patch(url, data=data, expected_code=403) + + self.assertIn( + 'You do not have permission to perform this action', str(response.data) + ) + + self.user.is_staff = True + self.user.is_superuser = True + self.user.save() + + for val in [True, False]: + data['is_staff'] = True + data['is_superuser'] = val + + response = self.patch(url, data=data, expected_code=200) + self.assertEqual(response.data['is_superuser'], val) + self.assertEqual(response.data['is_staff'], True) + # Try again, but logged out - expect no access to the endpoint self.logout() self.get(url, expected_code=401) @@ -185,8 +218,11 @@ class UserAPITests(InvenTreeAPITestCase): expected_code=200, ) self.assertIn('name', response.data) + self.assertIn('roles', response.data) self.assertIn('permissions', response.data) + self.assertGreater(len(response.data['roles']), 0) + def test_login_redirect(self): """Test login redirect endpoint.""" response = self.get(reverse('api-login-redirect'), expected_code=302) @@ -229,6 +265,71 @@ class UserAPITests(InvenTreeAPITestCase): self.assertEqual(len(data['permissions']), len(perms) + len(build_perms)) + def test_me_endpoint(self): + """Test against the users /me/ endpoint.""" + url = reverse('api-user-me') + + # Test endpoint options + response = self.options(url, expected_code=200) + + # Check that particular fields are present, and have the correct attributes + fields = response.data['actions']['PUT'] + + for name in [ + 'pk', + 'username', + 'email', + 'groups', + 'is_active', + 'is_staff', + 'is_superuser', + ]: + self.assertIn(name, fields) + + for name in ['is_active', 'is_staff', 'is_superuser']: + self.assertTrue(fields[name]['read_only']) + + # Perform a GET request against the endpoint + response = self.get(url, expected_code=200) + + for field in [ + 'pk', + 'username', + 'email', + 'is_active', + 'is_staff', + 'is_superuser', + ]: + self.assertIn(field, response.data) + + # Change their own username + for name in ['Henry', 'Sally']: + response = self.patch(url, data={'username': name}, expected_code=200) + self.assertEqual(response.data['username'], name) + + # Defined starting point for the user + for v in [True, False]: + self.user.is_staff = v + self.user.is_superuser = v + self.user.save() + + for key in ['is_staff', 'is_superuser']: + for val in [True, False]: + response = self.patch(url, data={key: val}, expected_code=200) + + # Check that the field was *NOT CHANGED* + self.assertEqual(response.data[key], v) + + # Ensure we cannot change the "is_active" field either + response = self.patch(url, data={'is_active': False}, expected_code=200) + self.assertEqual(response.data['is_active'], True) + + self.user.is_active = False + self.user.save() + + # User cannot fetch their own details if they are not active + response = self.get(url, expected_code=401) + class SuperuserAPITests(InvenTreeAPITestCase): """Tests for user API endpoints that require superuser rights.""" @@ -245,7 +346,7 @@ class SuperuserAPITests(InvenTreeAPITestCase): resp = self.put(url, {'password': 1}, expected_code=400) self.assertContains(resp, 'This password is too short', status_code=400) - # now with overwerite + # now with overwrite resp = self.put( url, {'password': 1, 'override_warning': True}, expected_code=200 ) @@ -259,6 +360,8 @@ class SuperuserAPITests(InvenTreeAPITestCase): class UserTokenTests(InvenTreeAPITestCase): """Tests for user token functionality.""" + fixtures = ['users'] + def test_token_generation(self): """Test user token generation.""" url = reverse('api-token') @@ -397,8 +500,30 @@ class UserTokenTests(InvenTreeAPITestCase): self.client.logout() self.get(reverse('api-token'), expected_code=401) + def test_token_security(self): + """Test that token generation is only available to users with the correct permissions.""" + url = reverse('api-token-list') -class GroupDetialTests(InvenTreeAPITestCase): + # Try to generate a token for a different user (should fail) + response = self.post(url, data={'name': 'test', 'user': 1}, expected_code=400) + self.assertIn( + 'Only a superuser can create a token for another user', str(response.data) + ) + + # there should be no tokens created + self.assertEqual(ApiToken.objects.count(), 0) + + # now with superuser permissions + self.user.is_superuser = True + self.user.save() + + response = self.post(url, data={'name': 'test', 'user': 1}, expected_code=201) + self.assertIn('token', response.data) + + self.assertEqual(ApiToken.objects.count(), 1) + + +class GroupDetailTests(InvenTreeAPITestCase): """Tests for the GroupDetail API endpoint.""" fixtures = ['users'] diff --git a/src/backend/requirements-3.14.txt b/src/backend/requirements-3.14.txt index eb0a8ff83f..90821b3542 100644 --- a/src/backend/requirements-3.14.txt +++ b/src/backend/requirements-3.14.txt @@ -95,22 +95,22 @@ bleach==4.1.0 \ # via # -c src/backend/requirements.txt # django-markdownify -blessed==1.34.0 \ - --hash=sha256:3d17468c3d47e11ed8d6ca3da1270b8aba8ac8bd0a55a1f8189e4d04f223a1f0 \ - --hash=sha256:eb403f9ce2efab633bd1e7a05fbb35b979a7b9f213ddc41478dd55dd6999e8bf +blessed==1.38.0 \ + --hash=sha256:89ce6ec6567f7aced0716b73577b7a1702eb23c667838bb46d7d9bd48c36d1b3 \ + --hash=sha256:905884ae650e41284fa4fd7d0c3eed5e5b4a42be8c2bfb24c90d79fbf26a1490 # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -boto3==1.42.76 \ - --hash=sha256:63c6779c814847016b89ae1b72ed968f8a63d80e589ba337511aa6fc1b59585e \ - --hash=sha256:aa2b1973eee8973a9475d24bb579b1dee7176595338d4e4f7880b5c6189b8814 +boto3==1.42.87 \ + --hash=sha256:15cc1404b3ccbcfe17bd5834d467b1b28d53d9aca44e3798dc44876ac57362e6 \ + --hash=sha256:b5b86a826f8f12c7d38679f35bd0135807a6867a21eb8be6dea7c27aeb14ec14 # via # -c src/backend/requirements.txt # django-anymail # django-storages -botocore==1.42.76 \ - --hash=sha256:151e714ae3c32f68ea0b4dc60751401e03f84a87c6cf864ea0ee64aa10eb4607 \ - --hash=sha256:c553fa0ae29e36a5c407f74da78b78404b81b74b15fb62bf640a3cd9385f0874 +botocore==1.42.87 \ + --hash=sha256:1c6cc9555c1feec50b290a42de70ba6f04826c009562c2c12bb9990d0258482d \ + --hash=sha256:32832df27c039cc1a518289afe0f6006296d3df26603b5f66e911457e67f0146 # via # -c src/backend/requirements.txt # boto3 @@ -316,189 +316,189 @@ cffi==2.0.0 \ # cryptography # pynacl # weasyprint -charset-normalizer==3.4.6 \ - --hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \ - --hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \ - --hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \ - --hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \ - --hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \ - --hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \ - --hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \ - --hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \ - --hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \ - --hash=sha256:1cf0a70018692f85172348fe06d3a4b63f94ecb055e13a00c644d368eb82e5b8 \ - --hash=sha256:1ed80ff870ca6de33f4d953fda4d55654b9a2b340ff39ab32fa3adbcd718f264 \ - --hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \ - --hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \ - --hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \ - --hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \ - --hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \ - --hash=sha256:2bd9d128ef93637a5d7a6af25363cf5dec3fa21cf80e68055aad627f280e8afa \ - --hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \ - --hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \ - --hash=sha256:2f7fdd9b6e6c529d6a2501a2d36b240109e78a8ceaef5687cfcfa2bbe671d297 \ - --hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \ - --hash=sha256:31215157227939b4fb3d740cd23fe27be0439afef67b785a1eb78a3ae69cba9e \ - --hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \ - --hash=sha256:3516bbb8d42169de9e61b8520cbeeeb716f12f4ecfe3fd30a9919aa16c806ca8 \ - --hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \ - --hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \ - --hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \ - --hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \ - --hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \ - --hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \ - --hash=sha256:461598cd852bfa5a61b09cae2b1c02e2efcd166ee5516e243d540ac24bfa68a7 \ - --hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \ - --hash=sha256:48696db7f18afb80a068821504296eb0787d9ce239b91ca15059d1d3eaacf13b \ - --hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \ - --hash=sha256:4d1d02209e06550bdaef34af58e041ad71b88e624f5d825519da3a3308e22687 \ - --hash=sha256:4f41da960b196ea355357285ad1316a00099f22d0929fe168343b99b254729c9 \ - --hash=sha256:517ad0e93394ac532745129ceabdf2696b609ec9f87863d337140317ebce1c14 \ - --hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \ - --hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \ - --hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \ - --hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \ - --hash=sha256:54fae94be3d75f3e573c9a1b5402dc593de19377013c9a0e4285e3d402dd3a2a \ - --hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \ - --hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \ - --hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \ - --hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \ - --hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \ - --hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \ - --hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \ - --hash=sha256:659a1e1b500fac8f2779dd9e1570464e012f43e580371470b45277a27baa7532 \ - --hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \ - --hash=sha256:69dd852c2f0ad631b8b60cfbe25a28c0058a894de5abb566619c205ce0550eae \ - --hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \ - --hash=sha256:71be7e0e01753a89cf024abf7ecb6bca2c81738ead80d43004d9b5e3f1244e64 \ - --hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \ - --hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \ - --hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \ - --hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \ - --hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \ - --hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \ - --hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \ - --hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \ - --hash=sha256:802168e03fba8bbc5ce0d866d589e4b1ca751d06edee69f7f3a19c5a9fe6b597 \ - --hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \ - --hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \ - --hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \ - --hash=sha256:8761ac29b6c81574724322a554605608a9960769ea83d2c73e396f3df896ad54 \ - --hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \ - --hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \ - --hash=sha256:8bc5f0687d796c05b1e28ab0d38a50e6309906ee09375dd3aff6a9c09dd6e8f4 \ - --hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \ - --hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \ - --hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \ - --hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \ - --hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \ - --hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \ - --hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \ - --hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \ - --hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \ - --hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \ - --hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \ - --hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \ - --hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \ - --hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \ - --hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \ - --hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \ - --hash=sha256:ab30e5e3e706e3063bc6de96b118688cb10396b70bb9864a430f67df98c61ecc \ - --hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \ - --hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \ - --hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \ - --hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \ - --hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \ - --hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \ - --hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \ - --hash=sha256:bf625105bb9eef28a56a943fec8c8a98aeb80e7d7db99bd3c388137e6eb2d237 \ - --hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \ - --hash=sha256:c45a03a4c69820a399f1dda9e1d8fbf3562eda46e7720458180302021b08f778 \ - --hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \ - --hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \ - --hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \ - --hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \ - --hash=sha256:d08ec48f0a1c48d75d0356cea971921848fb620fdeba805b28f937e90691209f \ - --hash=sha256:d1a2ee9c1499fc8f86f4521f27a973c914b211ffa87322f4ee33bb35392da2c5 \ - --hash=sha256:d5f5d1e9def3405f60e3ca8232d56f35c98fb7bf581efcc60051ebf53cb8b611 \ - --hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \ - --hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \ - --hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \ - --hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \ - --hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \ - --hash=sha256:df01808ee470038c3f8dc4f48620df7225c49c2d6639e38f96e6d6ac6e6f7b0e \ - --hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \ - --hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \ - --hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \ - --hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \ - --hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \ - --hash=sha256:e8aeb10fcbe92767f0fa69ad5a72deca50d0dca07fbde97848997d778a50c9fe \ - --hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \ - --hash=sha256:ecbbd45615a6885fe3240eb9db73b9e62518b611850fdf8ab08bd56de7ad2b17 \ - --hash=sha256:ee4ec14bc1680d6b0afab9aea2ef27e26d2024f18b24a2d7155a52b60da7e833 \ - --hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \ - --hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \ - --hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \ - --hash=sha256:f50498891691e0864dc3da965f340fada0771f6142a378083dc4608f4ea513e2 \ - --hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \ - --hash=sha256:f61aa92e4aad0be58eb6eb4e0c21acf32cf8065f4b2cae5665da756c4ceef982 \ - --hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \ - --hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \ - --hash=sha256:f98059e4fcd3e3e4e2d632b7cf81c2faae96c43c60b569e9c621468082f1d104 \ - --hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659 +charset-normalizer==3.4.7 \ + --hash=sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc \ + --hash=sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c \ + --hash=sha256:07d9e39b01743c3717745f4c530a6349eadbfa043c7577eef86c502c15df2c67 \ + --hash=sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4 \ + --hash=sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0 \ + --hash=sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c \ + --hash=sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5 \ + --hash=sha256:12a6fff75f6bc66711b73a2f0addfc4c8c15a20e805146a02d147a318962c444 \ + --hash=sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153 \ + --hash=sha256:14265bfe1f09498b9d8ec91e9ec9fa52775edf90fcbde092b25f4a33d444fea9 \ + --hash=sha256:16d971e29578a5e97d7117866d15889a4a07befe0e87e703ed63cd90cb348c01 \ + --hash=sha256:177a0ba5f0211d488e295aaf82707237e331c24788d8d76c96c5a41594723217 \ + --hash=sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b \ + --hash=sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c \ + --hash=sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a \ + --hash=sha256:1dc8b0ea451d6e69735094606991f32867807881400f808a106ee1d963c46a83 \ + --hash=sha256:1efde3cae86c8c273f1eb3b287be7d8499420cf2fe7585c41d370d3e790054a5 \ + --hash=sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7 \ + --hash=sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb \ + --hash=sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c \ + --hash=sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1 \ + --hash=sha256:2cd4a60d0e2fb04537162c62bbbb4182f53541fe0ede35cdf270a1c1e723cc42 \ + --hash=sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab \ + --hash=sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df \ + --hash=sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e \ + --hash=sha256:320ade88cfb846b8cd6b4ddf5ee9e80ee0c1f52401f2456b84ae1ae6a1a5f207 \ + --hash=sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18 \ + --hash=sha256:36836d6ff945a00b88ba1e4572d721e60b5b8c98c155d465f56ad19d68f23734 \ + --hash=sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38 \ + --hash=sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110 \ + --hash=sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18 \ + --hash=sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44 \ + --hash=sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d \ + --hash=sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48 \ + --hash=sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e \ + --hash=sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5 \ + --hash=sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d \ + --hash=sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53 \ + --hash=sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790 \ + --hash=sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c \ + --hash=sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b \ + --hash=sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116 \ + --hash=sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d \ + --hash=sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10 \ + --hash=sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6 \ + --hash=sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2 \ + --hash=sha256:6370e8686f662e6a3941ee48ed4742317cafbe5707e36406e9df792cdb535776 \ + --hash=sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a \ + --hash=sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265 \ + --hash=sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008 \ + --hash=sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943 \ + --hash=sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374 \ + --hash=sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246 \ + --hash=sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e \ + --hash=sha256:6e0d51f618228538a3e8f46bd246f87a6cd030565e015803691603f55e12afb5 \ + --hash=sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616 \ + --hash=sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15 \ + --hash=sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41 \ + --hash=sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960 \ + --hash=sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752 \ + --hash=sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e \ + --hash=sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72 \ + --hash=sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7 \ + --hash=sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8 \ + --hash=sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b \ + --hash=sha256:813c0e0132266c08eb87469a642cb30aaff57c5f426255419572aaeceeaa7bf4 \ + --hash=sha256:82b271f5137d07749f7bf32f70b17ab6eaabedd297e75dce75081a24f76eb545 \ + --hash=sha256:84c018e49c3bf790f9c2771c45e9313a08c2c2a6342b162cd650258b57817706 \ + --hash=sha256:8751d2787c9131302398b11e6c8068053dcb55d5a8964e114b6e196cf16cb366 \ + --hash=sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb \ + --hash=sha256:87fad7d9ba98c86bcb41b2dc8dbb326619be2562af1f8ff50776a39e55721c5a \ + --hash=sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e \ + --hash=sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00 \ + --hash=sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f \ + --hash=sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a \ + --hash=sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1 \ + --hash=sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66 \ + --hash=sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356 \ + --hash=sha256:a6c5863edfbe888d9eff9c8b8087354e27618d9da76425c119293f11712a6319 \ + --hash=sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4 \ + --hash=sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad \ + --hash=sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d \ + --hash=sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5 \ + --hash=sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7 \ + --hash=sha256:aef65cd602a6d0e0ff6f9930fcb1c8fec60dd2cfcb6facaf4bdb0e5873042db0 \ + --hash=sha256:af21eb4409a119e365397b2adbaca4c9ccab56543a65d5dbd9f920d6ac29f686 \ + --hash=sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34 \ + --hash=sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49 \ + --hash=sha256:bb8cc7534f51d9a017b93e3e85b260924f909601c3df002bcdb58ddb4dc41a5c \ + --hash=sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1 \ + --hash=sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e \ + --hash=sha256:bd9b23791fe793e4968dba0c447e12f78e425c59fc0e3b97f6450f4781f3ee60 \ + --hash=sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0 \ + --hash=sha256:c0f081d69a6e58272819b70288d3221a6ee64b98df852631c80f293514d3b274 \ + --hash=sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d \ + --hash=sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0 \ + --hash=sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae \ + --hash=sha256:c593052c465475e64bbfe5dbd81680f64a67fdc752c56d7a0ae205dc8aeefe0f \ + --hash=sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d \ + --hash=sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe \ + --hash=sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3 \ + --hash=sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393 \ + --hash=sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1 \ + --hash=sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af \ + --hash=sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44 \ + --hash=sha256:d61f00a0869d77422d9b2aba989e2d24afa6ffd552af442e0e58de4f35ea6d00 \ + --hash=sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c \ + --hash=sha256:dca4bbc466a95ba9c0234ef56d7dd9509f63da22274589ebd4ed7f1f4d4c54e3 \ + --hash=sha256:dd915403e231e6b1809fe9b6d9fc55cf8fb5e02765ac625d9cd623342a7905d7 \ + --hash=sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd \ + --hash=sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e \ + --hash=sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b \ + --hash=sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8 \ + --hash=sha256:e5f4d355f0a2b1a31bc3edec6795b46324349c9cb25eed068049e4f472fb4259 \ + --hash=sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859 \ + --hash=sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46 \ + --hash=sha256:e80c8378d8f3d83cd3164da1ad2df9e37a666cdde7b1cb2298ed0b558064be30 \ + --hash=sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b \ + --hash=sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46 \ + --hash=sha256:ed065083d0898c9d5b4bbec7b026fd755ff7454e6e8b73a67f8c744b13986e24 \ + --hash=sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a \ + --hash=sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24 \ + --hash=sha256:f22dec1690b584cea26fade98b2435c132c1b5f68e39f5a0b7627cd7ae31f1dc \ + --hash=sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215 \ + --hash=sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063 \ + --hash=sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832 \ + --hash=sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6 \ + --hash=sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79 \ + --hash=sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464 # via # -c src/backend/requirements.txt # requests -cryptography==46.0.6 \ - --hash=sha256:02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70 \ - --hash=sha256:063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d \ - --hash=sha256:12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a \ - --hash=sha256:12f0fa16cc247b13c43d56d7b35287ff1569b5b1f4c5e87e92cc4fcc00cd10c0 \ - --hash=sha256:22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97 \ - --hash=sha256:26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30 \ - --hash=sha256:27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759 \ - --hash=sha256:2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c \ - --hash=sha256:2ea0f37e9a9cf0df2952893ad145fd9627d326a59daec9b0802480fa3bcd2ead \ - --hash=sha256:2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275 \ - --hash=sha256:341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58 \ - --hash=sha256:380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f \ - --hash=sha256:3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361 \ - --hash=sha256:3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507 \ - --hash=sha256:456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa \ - --hash=sha256:4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b \ - --hash=sha256:50575a76e2951fe7dbd1f56d181f8c5ceeeb075e9ff88e7ad997d2f42af06e7b \ - --hash=sha256:639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8 \ - --hash=sha256:64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8 \ - --hash=sha256:6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72 \ - --hash=sha256:67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175 \ - --hash=sha256:6728c49e3b2c180ef26f8e9f0a883a2c585638db64cf265b49c9ba10652d430e \ - --hash=sha256:6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124 \ - --hash=sha256:69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a \ - --hash=sha256:760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c \ - --hash=sha256:79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f \ - --hash=sha256:7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d \ - --hash=sha256:7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4 \ - --hash=sha256:7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c \ - --hash=sha256:8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290 \ - --hash=sha256:8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca \ - --hash=sha256:8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d \ - --hash=sha256:90e5f0a7b3be5f40c3a0a0eafb32c681d8d2c181fc2a1bdabe9b3f611d9f6b1a \ - --hash=sha256:97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed \ - --hash=sha256:9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a \ - --hash=sha256:9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb \ - --hash=sha256:a3e84d5ec9ba01f8fd03802b2147ba77f0c8f2617b2aff254cedd551844209c8 \ - --hash=sha256:aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707 \ - --hash=sha256:b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410 \ - --hash=sha256:b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736 \ - --hash=sha256:bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2 \ - --hash=sha256:c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4 \ - --hash=sha256:c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013 \ - --hash=sha256:cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19 \ - --hash=sha256:d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b \ - --hash=sha256:d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738 \ - --hash=sha256:d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463 \ - --hash=sha256:ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77 \ - --hash=sha256:ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4 +cryptography==46.0.7 \ + --hash=sha256:04959522f938493042d595a736e7dbdff6eb6cc2339c11465b3ff89343b65f65 \ + --hash=sha256:128c5edfe5e5938b86b03941e94fac9ee793a94452ad1365c9fc3f4f62216832 \ + --hash=sha256:1d25aee46d0c6f1a501adcddb2d2fee4b979381346a78558ed13e50aa8a59067 \ + --hash=sha256:24402210aa54baae71d99441d15bb5a1919c195398a87b563df84468160a65de \ + --hash=sha256:258514877e15963bd43b558917bc9f54cf7cf866c38aa576ebf47a77ddbc43a4 \ + --hash=sha256:35719dc79d4730d30f1c2b6474bd6acda36ae2dfae1e3c16f2051f215df33ce0 \ + --hash=sha256:397655da831414d165029da9bc483bed2fe0e75dde6a1523ec2fe63f3c46046b \ + --hash=sha256:3986ac1dee6def53797289999eabe84798ad7817f3e97779b5061a95b0ee4968 \ + --hash=sha256:420b1e4109cc95f0e5700eed79908cef9268265c773d3a66f7af1eef53d409ef \ + --hash=sha256:42a1e5f98abb6391717978baf9f90dc28a743b7d9be7f0751a6f56a75d14065b \ + --hash=sha256:462ad5cb1c148a22b2e3bcc5ad52504dff325d17daf5df8d88c17dda1f75f2a4 \ + --hash=sha256:506c4ff91eff4f82bdac7633318a526b1d1309fc07ca76a3ad182cb5b686d6d3 \ + --hash=sha256:5ad9ef796328c5e3c4ceed237a183f5d41d21150f972455a9d926593a1dcb308 \ + --hash=sha256:5d1c02a14ceb9148cc7816249f64f623fbfee39e8c03b3650d842ad3f34d637e \ + --hash=sha256:5e51be372b26ef4ba3de3c167cd3d1022934bc838ae9eaad7e644986d2a3d163 \ + --hash=sha256:60627cf07e0d9274338521205899337c5d18249db56865f943cbe753aa96f40f \ + --hash=sha256:65814c60f8cc400c63131584e3e1fad01235edba2614b61fbfbfa954082db0ee \ + --hash=sha256:73510b83623e080a2c35c62c15298096e2a5dc8d51c3b4e1740211839d0dea77 \ + --hash=sha256:7bbc6ccf49d05ac8f7d7b5e2e2c33830d4fe2061def88210a126d130d7f71a85 \ + --hash=sha256:80406c3065e2c55d7f49a9550fe0c49b3f12e5bfff5dedb727e319e1afb9bf99 \ + --hash=sha256:84d4cced91f0f159a7ddacad249cc077e63195c36aac40b4150e7a57e84fffe7 \ + --hash=sha256:8a469028a86f12eb7d2fe97162d0634026d92a21f3ae0ac87ed1c4a447886c83 \ + --hash=sha256:91bbcb08347344f810cbe49065914fe048949648f6bd5c2519f34619142bbe85 \ + --hash=sha256:935ce7e3cfdb53e3536119a542b839bb94ec1ad081013e9ab9b7cfd478b05006 \ + --hash=sha256:9694078c5d44c157ef3162e3bf3946510b857df5a3955458381d1c7cfc143ddb \ + --hash=sha256:a1529d614f44b863a7b480c6d000fe93b59acee9c82ffa027cfadc77521a9f5e \ + --hash=sha256:abad9dac36cbf55de6eb49badd4016806b3165d396f64925bf2999bcb67837ba \ + --hash=sha256:b36a4695e29fe69215d75960b22577197aca3f7a25b9cf9d165dcfe9d80bc325 \ + --hash=sha256:b7b412817be92117ec5ed95f880defe9cf18a832e8cafacf0a22337dc1981b4d \ + --hash=sha256:c5b1ccd1239f48b7151a65bc6dd54bcfcc15e028c8ac126d3fada09db0e07ef1 \ + --hash=sha256:cbd5fb06b62bd0721e1170273d3f4d5a277044c47ca27ee257025146c34cbdd1 \ + --hash=sha256:cdf1a610ef82abb396451862739e3fc93b071c844399e15b90726ef7470eeaf2 \ + --hash=sha256:cdfbe22376065ffcf8be74dc9a909f032df19bc58a699456a21712d6e5eabfd0 \ + --hash=sha256:d02c738dacda7dc2a74d1b2b3177042009d5cab7c7079db74afc19e56ca1b455 \ + --hash=sha256:d151173275e1728cf7839aaa80c34fe550c04ddb27b34f48c232193df8db5842 \ + --hash=sha256:d23c8ca48e44ee015cd0a54aeccdf9f09004eba9fc96f38c911011d9ff1bd457 \ + --hash=sha256:d3b99c535a9de0adced13d159c5a9cf65c325601aa30f4be08afd680643e9c15 \ + --hash=sha256:d5f7520159cd9c2154eb61eb67548ca05c5774d39e9c2c4339fd793fe7d097b2 \ + --hash=sha256:db0f493b9181c7820c8134437eb8b0b4792085d37dbb24da050476ccb664e59c \ + --hash=sha256:e06acf3c99be55aa3b516397fe42f5855597f430add9c17fa46bf2e0fb34c9bb \ + --hash=sha256:e4cfd68c5f3e0bfdad0d38e023239b96a2fe84146481852dffbcca442c245aa5 \ + --hash=sha256:ea42cbe97209df307fdc3b155f1b6fa2577c0defa8f1f7d3be7d31d189108ad4 \ + --hash=sha256:ebd6daf519b9f189f85c479427bbd6e9c9037862cf8fe89ee35503bd209ed902 \ + --hash=sha256:f247c8c1a1fb45e12586afbb436ef21ff1e80670b2861a90353d9b025583d246 \ + --hash=sha256:fbfd0e5f273877695cb93baf14b185f4878128b250cc9f8e617ea0c025dfb022 \ + --hash=sha256:fc9ab8856ae6cf7c9358430e49b368f3108f050031442eaeb6b9d87e4dcf4e4f \ + --hash=sha256:fcd8eac50d9138c1d7fc53a653ba60a2bee81a505f9f8850b6b2888555a45d0e \ + --hash=sha256:fdd1736fed309b4300346f88f74cd120c27c56852c3838cab416e7a166f67298 \ + --hash=sha256:ffca7aa1d00cf7d6469b988c581598f2259e46215e0140af408966a24cf086ce # via # -c src/backend/requirements.txt # -r src/backend/requirements.in @@ -520,9 +520,9 @@ defusedxml==0.7.1 \ # via # -c src/backend/requirements.txt # python3-openid -django==5.2.12 \ - --hash=sha256:4853482f395c3a151937f6991272540fcbf531464f254a347bf7c89f53c8cff7 \ - --hash=sha256:6b809af7165c73eff5ce1c87fdae75d4da6520d6667f86401ecf55b681eb1eeb +django==5.2.13 \ + --hash=sha256:5788fce61da23788a8ce6f02583765ab060d396720924789f97fa42119d37f7a \ + --hash=sha256:a31589db5188d074c63f0945c3888fad104627dfcc236fb2b97f71f89da33bc4 # via # -c src/backend/requirements.txt # -r src/backend/requirements.in @@ -578,9 +578,9 @@ django-cors-headers==4.9.0 \ # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -django-dbbackup==5.2.0 \ - --hash=sha256:540948869e44778b5b33333cbab0cfe44279defd47df635d309ede8666894370 \ - --hash=sha256:72b11dd31758abcf8f2d405fd2efbc49c9624bc17196f8c68542d3dc8d8d53c3 +django-dbbackup==5.3.0 \ + --hash=sha256:2c880dba7650539e8a724174fedb5213062c4fcda3aa09e1c5f3f573192106cb \ + --hash=sha256:ff80b5facd524e3f6479235aeb330b094a1c982f8b0b9503c24ba0dc613162ed # via # -c src/backend/requirements.txt # -r src/backend/requirements.in @@ -886,82 +886,82 @@ fonttools[woff]==4.62.1 \ # via # -c src/backend/requirements.txt # weasyprint -googleapis-common-protos==1.73.0 \ - --hash=sha256:778d07cd4fbeff84c6f7c72102f0daf98fa2bfd3fa8bea426edc545588da0b5a \ - --hash=sha256:dfdaaa2e860f242046be561e6d6cb5c5f1541ae02cfbcb034371aadb2942b4e8 +googleapis-common-protos==1.74.0 \ + --hash=sha256:57971e4eeeba6aad1163c1f0fc88543f965bb49129b8bb55b2b7b26ecab084f1 \ + --hash=sha256:702216f78610bb510e3f12ac3cafd281b7ac45cc5d86e90ad87e4d301a3426b5 # via # -c src/backend/requirements.txt # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http -grpcio==1.78.0 \ - --hash=sha256:082653eecbdf290e6e3e2c276ab2c54b9e7c299e07f4221872380312d8cf395e \ - --hash=sha256:10a9a644b5dd5aec3b82b5b0b90d41c0fa94c85ef42cb42cf78a23291ddb5e7d \ - --hash=sha256:12a771591ae40bc65ba67048fa52ef4f0e6db8279e595fd349f9dfddeef571f9 \ - --hash=sha256:185dea0d5260cbb2d224c507bf2a5444d5abbb1fa3594c1ed7e4c709d5eb8383 \ - --hash=sha256:1afa62af6e23f88629f2b29ec9e52ec7c65a7176c1e0a83292b93c76ca882558 \ - --hash=sha256:2045397e63a7a0ee7957c25f7dbb36ddc110e0cfb418403d110c0a7a68a844e9 \ - --hash=sha256:207db540302c884b8848036b80db352a832b99dfdf41db1eb554c2c2c7800f65 \ - --hash=sha256:271c73e6e5676afe4fc52907686670c7cea22ab2310b76a59b678403ed40d670 \ - --hash=sha256:2777b783f6c13b92bd7b716667452c329eefd646bfb3f2e9dabea2e05dbd34f6 \ - --hash=sha256:2bf5e2e163b356978b23652c4818ce4759d40f4712ee9ec5a83c4be6f8c23a3a \ - --hash=sha256:35eb275bf1751d2ffbd8f57cdbc46058e857cf3971041521b78b7db94bdaf127 \ - --hash=sha256:391e93548644e6b2726f1bb84ed60048d4bcc424ce5e4af0843d28ca0b754fec \ - --hash=sha256:3c586ac70e855c721bda8f548d38c3ca66ac791dc49b66a8281a1f99db85e452 \ - --hash=sha256:3f8904a8165ab21e07e58bf3e30a73f4dffc7a1e0dbc32d51c61b5360d26f43e \ - --hash=sha256:459ab414b35f4496138d0ecd735fed26f1318af5e52cb1efbc82a09f0d5aa911 \ - --hash=sha256:4c5533d03a6cbd7f56acfc9cfb44ea64f63d29091e40e44010d34178d392d7eb \ - --hash=sha256:51b13f9aed9d59ee389ad666b8c2214cc87b5de258fa712f9ab05f922e3896c6 \ - --hash=sha256:5361a0630a7fdb58a6a97638ab70e1dae2893c4d08d7aba64ded28bb9e7a29df \ - --hash=sha256:5397fff416b79e4b284959642a4e95ac4b0f1ece82c9993658e0e477d40551ec \ - --hash=sha256:57bab6deef2f4f1ca76cc04565df38dc5713ae6c17de690721bdf30cb1e0545c \ - --hash=sha256:6092beabe1966a3229f599d7088b38dfc8ffa1608b5b5cdda31e591e6500f856 \ - --hash=sha256:684083fd383e9dc04c794adb838d4faea08b291ce81f64ecd08e4577c7398adf \ - --hash=sha256:735e38e176a88ce41840c21bb49098ab66177c64c82426e24e0082500cc68af5 \ - --hash=sha256:7382b95189546f375c174f53a5fa873cef91c4b8005faa05cc5b3beea9c4f1c5 \ - --hash=sha256:748b6138585379c737adc08aeffd21222abbda1a86a0dca2a39682feb9196c20 \ - --hash=sha256:74be1268d1439eaaf552c698cdb11cd594f0c49295ae6bb72c34ee31abbe611b \ - --hash=sha256:7cc47943d524ee0096f973e1081cb8f4f17a4615f2116882a5f1416e4cfe92b5 \ - --hash=sha256:859b13906ce098c0b493af92142ad051bf64c7870fa58a123911c88606714996 \ - --hash=sha256:85f93781028ec63f383f6bc90db785a016319c561cc11151fbb7b34e0d012303 \ - --hash=sha256:86ce2371bfd7f212cf60d8517e5e854475c2c43ce14aa910e136ace72c6db6c1 \ - --hash=sha256:86f85dd7c947baa707078a236288a289044836d4b640962018ceb9cd1f899af5 \ - --hash=sha256:8dfffba826efcf366b1e3ccc37e67afe676f290e13a3b48d31a46739f80a8724 \ - --hash=sha256:8f2ac84905d12918e4e55a16da17939eb63e433dc11b677267c35568aa63fc84 \ - --hash=sha256:94309f498bcc07e5a7d16089ab984d42ad96af1d94b5a4eb966a266d9fcabf68 \ - --hash=sha256:94f95cf5d532d0e717eed4fc1810e8e6eded04621342ec54c89a7c2f14b581bf \ - --hash=sha256:9566fe4ababbb2610c39190791e5b829869351d14369603702e890ef3ad2d06e \ - --hash=sha256:9dca934f24c732750389ce49d638069c3892ad065df86cb465b3fa3012b70c9e \ - --hash=sha256:a9f136fbafe7ccf4ac7e8e0c28b31066e810be52d6e344ef954a3a70234e1702 \ - --hash=sha256:ab399ef5e3cd2a721b1038a0f3021001f19c5ab279f145e1146bb0b9f1b2b12c \ - --hash=sha256:b0c689c02947d636bc7fab3e30cc3a3445cca99c834dfb77cd4a6cabfc1c5597 \ - --hash=sha256:b2342d87af32790f934a79c3112641e7b27d63c261b8b4395350dad43eff1dc7 \ - --hash=sha256:b58f37edab4a3881bc6c9bca52670610e0c9ca14e2ea3cf9debf185b870457fb \ - --hash=sha256:bd8cb8026e5f5b50498a3c4f196f57f9db344dad829ffae16b82e4fdbaea2813 \ - --hash=sha256:be63c88b32e6c0f1429f1398ca5c09bc64b0d80950c8bb7807d7d7fb36fb84c7 \ - --hash=sha256:c3f293fdc675ccba4db5a561048cca627b5e7bd1c8a6973ffedabe7d116e22e2 \ - --hash=sha256:c41bc64626db62e72afec66b0c8a0da76491510015417c127bfc53b2fe6d7f7f \ - --hash=sha256:ce3a90455492bf8bfa38e56fbbe1dbd4f872a3d8eeaf7337dc3b1c8aa28c271b \ - --hash=sha256:ce7599575eeb25c0f4dc1be59cada6219f3b56176f799627f44088b21381a28a \ - --hash=sha256:dce09d6116df20a96acfdbf85e4866258c3758180e8c49845d6ba8248b6d0bbb \ - --hash=sha256:de8cb00d1483a412a06394b8303feec5dcb3b55f81d83aa216dbb6a0b86a94f5 \ - --hash=sha256:df2c8f3141f7cbd112a6ebbd760290b5849cda01884554f7c67acc14e7b1758a \ - --hash=sha256:e87cbc002b6f440482b3519e36e1313eb5443e9e9e73d6a52d43bd2004fcfd8e \ - --hash=sha256:e888474dee2f59ff68130f8a397792d8cb8e17e6b3434339657ba4ee90845a8c \ - --hash=sha256:f12857d24d98441af6a1d5c87442d624411db486f7ba12550b07788f74b67b04 \ - --hash=sha256:f2d4e43ee362adfc05994ed479334d5a451ab7bc3f3fee1b796b8ca66895acb4 \ - --hash=sha256:f3d6379493e18ad4d39537a82371c5281e153e963cecb13f953ebac155756525 \ - --hash=sha256:f8dff3d9777e5d2703a962ee5c286c239bf0ba173877cc68dc02c17d042e29de \ - --hash=sha256:f9ab915a267fc47c7e88c387a3a28325b58c898e23d4995f765728f4e3dedb97 \ - --hash=sha256:fbe6e89c7ffb48518384068321621b2a69cab509f58e40e4399fdd378fa6d074 \ - --hash=sha256:fd5f135b1bd58ab088930b3c613455796dfa0393626a6972663ccdda5b4ac6ce \ - --hash=sha256:ff870aebe9a93a85283837801d35cd5f8814fe2ad01e606861a7fb47c762a2b7 +grpcio==1.80.0 \ + --hash=sha256:00168469238b022500e486c1c33916acf2f2a9b2c022202cf8a1885d2e3073c1 \ + --hash=sha256:02e64bb0bb2da14d947a49e6f120a75e947250aebe65f9629b62bb1f5c14e6e9 \ + --hash=sha256:05d55e1798756282cddd52d56c896b3e7d673e3a8798c2f1cd05ba249a3bb4de \ + --hash=sha256:09e5e478b3d14afd23f12e49e8b44c8684ac3c5f08561c43a5b9691c54d136ab \ + --hash=sha256:0cb517eb1d0d0aaf1d87af7cc5b801d686557c1d88b2619f5e31fab3c2315921 \ + --hash=sha256:1b97cd29a8eda100b559b455331c487a80915b6ea6bd91cf3e89836c4ee8d957 \ + --hash=sha256:256507e2f524092f1473071a05e65a5b10d84b82e3ff24c5b571513cfaa61e2f \ + --hash=sha256:29aca15edd0688c22ba01d7cc01cb000d72b2033f4a3c72a81a19b56fd143257 \ + --hash=sha256:2bea16af2750fd0a899bf1abd9022244418b55d1f37da2202249ba4ba673838d \ + --hash=sha256:2dcc70e9f0ba987526e8e8603a610fb4f460e42899e74e7a518bf3c68fe1bf05 \ + --hash=sha256:2ed770b4c06984f3b47eb0517b1c69ad0b84ef3f40128f51448433be904634cd \ + --hash=sha256:31b9ac4ad1aa28ffee5503821fafd09e4da0a261ce1c1281c6c8da0423c83b6e \ + --hash=sha256:33eb763f18f006dc7fee1e69831d38d23f5eccd15b2e0f92a13ee1d9242e5e02 \ + --hash=sha256:367ce30ba67d05e0592470428f0ec1c31714cab9ef19b8f2e37be1f4c7d32fae \ + --hash=sha256:3b01e1f5464c583d2f567b2e46ff0d516ef979978f72091fd81f5ab7fa6e2e7f \ + --hash=sha256:3cb8130ba457d2aa09fa6b7c3ed6b6e4e6a2685fce63cb803d479576c4d80e21 \ + --hash=sha256:3d4147a97c8344d065d01bbf8b6acec2cf86fb0400d40696c8bdad34a64ffc0e \ + --hash=sha256:43168871f170d1e4ed16ae03d10cd21efa29f190e710a624cee7e5ae07da6f4f \ + --hash=sha256:448c884b668b868562b1bda833c5fce6272d26e1926ec46747cda05741d302c1 \ + --hash=sha256:4560cf0e86514595dbbd330cd65b7afad4b5c4b8c4905c041cfffa138d45e6fd \ + --hash=sha256:46c2390b59d67f84e882694d489f5b45707c657832d7934859ceb8c33f467069 \ + --hash=sha256:4e78c4ac0d97dc2e569b2f4bcbbb447491167cb358d1a389fc4af71ab6f70411 \ + --hash=sha256:4ed39fbdcf9b87370f6e8df4e39ca7b38b3e5e9d1b0013c7b6be9639d6578d14 \ + --hash=sha256:50a9871536d71c4fba24ee856abc03a87764570f0c457dd8db0b4018f379fed9 \ + --hash=sha256:51b4a7189b0bef2aa30adce3c78f09c83526cf3dddb24c6a96555e3b97340440 \ + --hash=sha256:52d143637e3872633fc7dd7c3c6a1c84e396b359f3a72e215f8bf69fd82084fc \ + --hash=sha256:5c07e82e822e1161354e32da2662f741a4944ea955f9f580ec8fb409dd6f6060 \ + --hash=sha256:627fb7312171cdc52828bd6fac8d7028ff2a64b89f1957b6f3416caa2218d141 \ + --hash=sha256:68e5851ac4b9afe07e7f84483803ad167852570d65326b34d54ca560bfa53fb6 \ + --hash=sha256:7b641fc3f1dc647bfd80bd713addc68f6d145956f64677e56d9ebafc0bd72388 \ + --hash=sha256:8502122a3cc1714038e39a0b071acb1207ca7844208d5ea0d091317555ee7106 \ + --hash=sha256:873ff5d17d68992ef6605330127425d2fc4e77e612fa3c3e0ed4e668685e3140 \ + --hash=sha256:886457a7768e408cdce226ad1ca67d2958917d306523a0e21e1a2fdaa75c9c9c \ + --hash=sha256:8ac393b58aa16991a2f1144ec578084d544038c12242da3a215966b512904d0f \ + --hash=sha256:8eb613f02d34721f1acf3626dfdb3545bd3c8505b0e52bf8b5710a28d02e8aa7 \ + --hash=sha256:92d787312e613754d4d8b9ca6d3297e69994a7912a32fa38c4c4e01c272974b0 \ + --hash=sha256:93b6f823810720912fd131f561f91f5fed0fda372b6b7028a2681b8194d5d294 \ + --hash=sha256:9a6284a5d907c37db53350645567c522be314bac859a64a7a5ca63b77bb7958f \ + --hash=sha256:9fe648599c0e37594c4809d81a9e77bd138cc82eb8baa71b6a86af65426723ff \ + --hash=sha256:a1dc80fe55685b4a543555e6eef975303b36c8db1023b1599b094b92aa77965f \ + --hash=sha256:a361c20ec1ccd3c3953d20fb6d7b4125093bdd10dff44c5e2bbb39e58917cedc \ + --hash=sha256:a72d84ad0514db063e21887fbacd1fd7acb4d494a564cae22227cd45c7fbf199 \ + --hash=sha256:aacdfb4ed3eb919ca997504d27e03d5dba403c85130b8ed450308590a738f7a4 \ + --hash=sha256:ba0915d51fd4ced2db5ff719f84e270afe0e2d4c45a7bdb1e8d036e4502928c2 \ + --hash=sha256:ba0db34f7e1d803a878284cd70e4c63cb6ae2510ba51937bf8f45ba997cefcf7 \ + --hash=sha256:bac1d573dfa84ce59a5547073e28fa7326d53352adda6912e362da0b917fcef4 \ + --hash=sha256:c51bf8ac4575af2e0678bccfb07e47321fc7acb5049b4482832c5c195e04e13a \ + --hash=sha256:c624cc9f1008361014378c9d776de7182b11fe8b2e5a81bc69f23a295f2a1ad0 \ + --hash=sha256:c71309cfce2f22be26aa4a847357c502db6c621f1a49825ae98aa0907595b193 \ + --hash=sha256:ce1794f4ea6cc3ca29463f42d665c32ba1b964b48958a66497917fe9069f26e6 \ + --hash=sha256:d334591df610ab94714048e0d5b4f3dd5ad1bee74dfec11eee344220077a79de \ + --hash=sha256:d8e11f167935b3eb089ac9038e1a063e6d7dbe995c0bb4a661e614583352e76f \ + --hash=sha256:dc053420fc75749c961e2a4c906398d7c15725d36ccc04ae6d16093167223b58 \ + --hash=sha256:deb10a1528473c11f72a0939eed36d83e847d7cbb63e8cc5611fb7a912d38614 \ + --hash=sha256:dfab85db094068ff42e2a3563f60ab3dddcc9d6488a35abf0132daec13209c8a \ + --hash=sha256:e172cf795a3ba5246d3529e4d34c53db70e888fa582a8ffebd2e6e48bc0cba50 \ + --hash=sha256:e9e408fc016dffd20661f0126c53d8a31c2821b5c13c5d67a0f5ed5de93319ad \ + --hash=sha256:ec0a592e926071b4abad50c1495cd0d0d513324b3ff5e7267067c33ba27506e4 \ + --hash=sha256:f14b618fc30de822681ee986cfdcc2d9327229dc4c98aed16896761cacd468b9 \ + --hash=sha256:f49eddcac43c3bf350c0385366a58f36bed8cc2c0ec35ef7b74b49e56552c0c2 \ + --hash=sha256:f7691a6788ad9196872f95716df5bc643ebba13c97140b7a5ee5c8e75d1dea81 # via # -c src/backend/requirements.txt # -r src/backend/requirements.in # opentelemetry-exporter-otlp-proto-grpc -gunicorn==25.2.0 \ - --hash=sha256:10bd7adb36d44945d97d0a1fdf9a0fb086ae9c7b39e56b4dece8555a6bf4a09c \ - --hash=sha256:88f5b444d0055bf298435384af7294f325e2273fd37ba9f9ff7b98e0a1e5dfdc +gunicorn==25.3.0 \ + --hash=sha256:cacea387dab08cd6776501621c295a904fe8e3b7aae9a1a3cbb26f4e7ed54660 \ + --hash=sha256:f74e1b2f9f76f6cd1ca01198968bd2dd65830edc24b6e8e4d78de8320e2fe889 # via # -c src/backend/requirements.txt # -r src/backend/requirements.in @@ -990,9 +990,9 @@ inflection==0.5.1 \ # via # -c src/backend/requirements.txt # drf-spectacular -invoke==2.2.1 \ - --hash=sha256:2413bc441b376e5cd3f55bb5d364f973ad8bdd7bf87e53c79de3c11bf3feecc8 \ - --hash=sha256:515bf49b4a48932b79b024590348da22f39c4942dff991ad1fb8b8baea1be707 +invoke==3.0.3 \ + --hash=sha256:437b6a622223824380bfb4e64f612711a6b648c795f565efc8625af66fb57f0c \ + --hash=sha256:f11327165e5cbb89b2ad1d88d3292b5113332c43b8553b494da435d6ec6f5053 # via # -c src/backend/requirements.txt # paramiko @@ -1027,153 +1027,147 @@ jsonschema-specifications==2025.9.1 \ # via # -c src/backend/requirements.txt # jsonschema -jwcrypto==1.5.6 \ - --hash=sha256:150d2b0ebbdb8f40b77f543fb44ffd2baeff48788be71f67f03566692fd55789 \ - --hash=sha256:771a87762a0c081ae6166958a954f80848820b2ab066937dc8b8379d65b1b039 +jwcrypto==1.5.7 \ + --hash=sha256:70204d7cca406eda8c82352e3c41ba2d946610dafd19e54403f0a1f4f18633c6 \ + --hash=sha256:729463fefe28b6de5cf1ebfda3e94f1a1b41d2799148ef98a01cb9678ebe2bb0 # via # -c src/backend/requirements.txt # django-oauth-toolkit -lxml==6.0.2 \ - --hash=sha256:058027e261afed589eddcfe530fcc6f3402d7fd7e89bfd0532df82ebc1563dba \ - --hash=sha256:063eccf89df5b24e361b123e257e437f9e9878f425ee9aae3144c77faf6da6d8 \ - --hash=sha256:064fdadaf7a21af3ed1dcaa106b854077fbeada827c18f72aec9346847cd65d0 \ - --hash=sha256:08b9d5e803c2e4725ae9e8559ee880e5328ed61aa0935244e0515d7d9dbec0aa \ - --hash=sha256:0a3c150a95fbe5ac91de323aa756219ef9cf7fde5a3f00e2281e30f33fa5fa4f \ - --hash=sha256:0aa7070978f893954008ab73bb9e3c24a7c56c054e00566a21b553dc18105fca \ - --hash=sha256:13dcecc9946dca97b11b7c40d29fba63b55ab4170d3c0cf8c0c164343b9bfdcf \ - --hash=sha256:13e35cbc684aadf05d8711a5d1b5857c92e5e580efa9a0d2be197199c8def607 \ - --hash=sha256:17f68764f35fd78d7c4cc4ef209a184c38b65440378013d24b8aecd327c3e0c8 \ - --hash=sha256:1941354d92699fb5ffe6ed7b32f9649e43c2feb4b97205f75866f7d21aa91452 \ - --hash=sha256:1c06035eafa8404b5cf475bb37a9f6088b0aca288d4ccc9d69389750d5543700 \ - --hash=sha256:1db01e5cf14345628e0cbe71067204db658e2fb8e51e7f33631f5f4735fefd8d \ - --hash=sha256:1e786a464c191ca43b133906c6903a7e4d56bef376b75d97ccbb8ec5cf1f0a4b \ - --hash=sha256:1ea99340b3c729beea786f78c38f60f4795622f36e305d9c9be402201efdc3b7 \ - --hash=sha256:200069a593c5e40b8f6fc0d84d86d970ba43138c3e68619ffa234bc9bb806a4d \ - --hash=sha256:2047d8234fe735ab77802ce5f2297e410ff40f5238aec569ad7c8e163d7b19a6 \ - --hash=sha256:21c73b476d3cfe836be731225ec3421fa2f048d84f6df6a8e70433dff1376d5a \ - --hash=sha256:24a8e756c982c001ca8d59e87c80c4d9dcd4d9b44a4cbeb8d9be4482c514d41d \ - --hash=sha256:252a22982dca42f6155125ac76d3432e548a7625d56f5a273ee78a5057216eca \ - --hash=sha256:2593c77efde7bfea7f6389f1ab249b15ed4aa5bc5cb5131faa3b843c429fbedb \ - --hash=sha256:25fcc59afc57d527cfc78a58f40ab4c9b8fd096a9a3f964d2781ffb6eb33f4ed \ - --hash=sha256:2613e67de13d619fd283d58bda40bff0ee07739f624ffee8b13b631abf33083d \ - --hash=sha256:27220da5be049e936c3aca06f174e8827ca6445a4353a1995584311487fc4e3e \ - --hash=sha256:2c8458c2cdd29589a8367c09c8f030f1d202be673f0ca224ec18590b3b9fb694 \ - --hash=sha256:2ca59e7e13e5981175b8b3e4ab84d7da57993eeff53c07764dcebda0d0e64ecd \ - --hash=sha256:2cbcbf6d6e924c28f04a43f3b6f6e272312a090f269eff68a2982e13e5d57659 \ - --hash=sha256:2ed6c667fcbb8c19c6791bbf40b7268ef8ddf5a96940ba9404b9f9a304832f6c \ - --hash=sha256:358d9adae670b63e95bc59747c72f4dc97c9ec58881d4627fe0120da0f90d314 \ - --hash=sha256:370cd78d5855cfbffd57c422851f7d3864e6ae72d0da615fca4dad8c45d375a5 \ - --hash=sha256:3ae2ce7d6fedfb3414a2b6c5e20b249c4c607f72cb8d2bb7cc9c6ec7c6f4e849 \ - --hash=sha256:3b1675e096e17c6fe9c0e8c81434f5736c0739ff9ac6123c87c2d452f48fc938 \ - --hash=sha256:3e3cb08855967a20f553ff32d147e14329b3ae70ced6edc2f282b94afbc74b2a \ - --hash=sha256:3efe1b21c7801ffa29a1112fab3b0f643628c30472d507f39544fd48e9549e34 \ - --hash=sha256:3fee0851639d06276e6b387f1c190eb9d7f06f7f53514e966b26bae46481ec90 \ - --hash=sha256:4077b7c79f31755df33b795dc12119cb557a0106bfdab0d2c2d97bd3cf3dffa6 \ - --hash=sha256:414aaa94e974e23a3e92e7ca5b97d10c0cf37b6481f50911032c69eeb3991bba \ - --hash=sha256:4197fb2534ee05fd3e7afaab5d8bfd6c2e186f65ea7f9cd6a82809c887bd1285 \ - --hash=sha256:442de7530296ef5e188373a1ea5789a46ce90c4847e597856570439621d9c553 \ - --hash=sha256:4468e3b83e10e0317a89a33d28f7aeba1caa4d1a6fd457d115dd4ffe90c5931d \ - --hash=sha256:452b899faa64f1805943ec1c0c9ebeaece01a1af83e130b69cdefeda180bb42c \ - --hash=sha256:45f93e6f75123f88d7f0cfd90f2d05f441b808562bf0bc01070a00f53f5028b5 \ - --hash=sha256:48461bd21625458dd01e14e2c38dd0aea69addc3c4f960c30d9f59d7f93be601 \ - --hash=sha256:4ddb1049fa0579d0cbd00503ad8c58b9ab34d1254c77bc6a5576d96ec7853dba \ - --hash=sha256:5179c60288204e6ddde3f774a93350177e08876eaf3ab78aa3a3649d43eb7d37 \ - --hash=sha256:57a86e1ebb4020a38d295c04fc79603c7899e0df71588043eb218722dabc087f \ - --hash=sha256:5921d924aa5468c939d95c9814fa9f9b5935a6ff4e679e26aaf2951f74043512 \ - --hash=sha256:59c45e125140b2c4b33920d21d83681940ca29f0b83f8629ea1a2196dc8cfe6a \ - --hash=sha256:5aa0fc67ae19d7a64c3fe725dc9a1bb11f80e01f78289d05c6f62545affec438 \ - --hash=sha256:5d444858b9f07cefff6455b983aea9a67f7462ba1f6cbe4a21e8bf6791bf2153 \ - --hash=sha256:60fa43be34f78bebb27812ed90f1925ec99560b0fa1decdb7d12b84d857d31e9 \ - --hash=sha256:6162a86d86893d63084faaf4ff937b3daea233e3682fb4474db07395794fa80d \ - --hash=sha256:61cb10eeb95570153e0c0e554f58df92ecf5109f75eacad4a95baa709e26c3d6 \ - --hash=sha256:65ac4a01aba353cfa6d5725b95d7aed6356ddc0a3cd734de00124d285b04b64f \ - --hash=sha256:65ea18d710fd14e0186c2f973dc60bb52039a275f82d3c44a0e42b43440ea534 \ - --hash=sha256:6605c604e6daa9e0d7f0a2137bdc47a2e93b59c60a65466353e37f8272f47c46 \ - --hash=sha256:66328dabea70b5ba7e53d94aa774b733cf66686535f3bc9250a7aab53a91caaf \ - --hash=sha256:6c8963287d7a4c5c9a432ff487c52e9c5618667179c18a204bdedb27310f022f \ - --hash=sha256:6cdaefac66e8b8f30e37a9b4768a391e1f8a16a7526d5bc77a7928408ef68e93 \ - --hash=sha256:6da5185951d72e6f5352166e3da7b0dc27aa70bd1090b0eb3f7f7212b53f1bb8 \ - --hash=sha256:6ddff43f702905a4e32bc24f3f2e2edfe0f8fde3277d481bffb709a4cced7a1f \ - --hash=sha256:6ec0e3f745021bfed19c456647f0298d60a24c9ff86d9d051f52b509663feeb1 \ - --hash=sha256:6f91fd2b2ea15a6800c8e24418c0775a1694eefc011392da73bc6cef2623b322 \ - --hash=sha256:700efd30c0fa1a3581d80a748157397559396090a51d306ea59a70020223d16f \ - --hash=sha256:71695772df6acea9f3c0e59e44ba8ac50c4f125217e84aab21074a1a55e7e5c9 \ - --hash=sha256:72c87e5ee4e58a8354fb9c7c84cbf95a1c8236c127a5d1b7683f04bed8361e1f \ - --hash=sha256:7d2de809c2ee3b888b59f995625385f74629707c9355e0ff856445cdcae682b7 \ - --hash=sha256:80dadc234ebc532e09be1975ff538d154a7fa61ea5031c03d25178855544728f \ - --hash=sha256:817ef43a0c0b4a77bd166dc9a09a555394105ff3374777ad41f453526e37f9cb \ - --hash=sha256:846ae9a12d54e368933b9759052d6206a9e8b250291109c48e350c1f1f49d916 \ - --hash=sha256:875c6b5ab39ad5291588aed6925fac99d0097af0dd62f33c7b43736043d4a2ec \ - --hash=sha256:8799481bbdd212470d17513a54d568f44416db01250f49449647b5ab5b5dccb9 \ - --hash=sha256:8ac6e5811ae2870953390452e3476694196f98d447573234592d30488147404d \ - --hash=sha256:8f8d0cbd0674ee89863a523e6994ac25fd5be9c8486acfc3e5ccea679bad2679 \ - --hash=sha256:901e3b4219fa04ef766885fb40fa516a71662a4c61b80c94d25336b4934b71c0 \ - --hash=sha256:90a345bbeaf9d0587a3aaffb7006aa39ccb6ff0e96a57286c0cb2fd1520ea192 \ - --hash=sha256:9261bb77c2dab42f3ecd9103951aeca2c40277701eb7e912c545c1b16e0e4917 \ - --hash=sha256:945da35a48d193d27c188037a05fec5492937f66fb1958c24fc761fb9d40d43c \ - --hash=sha256:957448ac63a42e2e49531b9d6c0fa449a1970dbc32467aaad46f11545be9af1d \ - --hash=sha256:967aab75434de148ec80597b75062d8123cadf2943fb4281f385141e18b21338 \ - --hash=sha256:98a5e1660dc7de2200b00d53fa00bcd3c35a3608c305d45a7bbcaf29fa16e83d \ - --hash=sha256:995e783eb0374c120f528f807443ad5a83a656a8624c467ea73781fc5f8a8304 \ - --hash=sha256:9b33d21594afab46f37ae58dfadd06636f154923c4e8a4d754b0127554eb2e77 \ - --hash=sha256:a4bf42d2e4cf52c28cc1812d62426b9503cdb0c87a6de81442626aa7d69707ba \ - --hash=sha256:a59f5448ba2ceccd06995c95ea59a7674a10de0810f2ce90c9006f3cbc044456 \ - --hash=sha256:a656ca105115f6b766bba324f23a67914d9c728dafec57638e2b92a9dcd76c62 \ - --hash=sha256:a6b5b39cc7e2998f968f05309e666103b53e2edd01df8dc51b90d734c0825444 \ - --hash=sha256:a7c5d5e5f1081955358533be077166ee97ed2571d6a66bdba6ec2f609a715d1a \ - --hash=sha256:a8bef9b9825fa8bc816a6e641bb67219489229ebc648be422af695f6e7a4fa7f \ - --hash=sha256:a8ffaeec5dfea5881d4c9d8913a32d10cfe3923495386106e4a24d45300ef79c \ - --hash=sha256:abd44571493973bad4598a3be7e1d807ed45aa2adaf7ab92ab7c62609569b17d \ - --hash=sha256:ac02dc29fd397608f8eb15ac1610ae2f2f0154b03f631e6d724d9e2ad4ee2c84 \ - --hash=sha256:af85529ae8d2a453feee4c780d9406a5e3b17cee0dd75c18bd31adcd584debc3 \ - --hash=sha256:b0c732aa23de8f8aec23f4b580d1e52905ef468afb4abeafd3fec77042abb6fe \ - --hash=sha256:b2142a376b40b6736dfc214fd2902409e9e3857eff554fed2d3c60f097e62a62 \ - --hash=sha256:b22a07cbb82fea98f8a2fd814f3d1811ff9ed76d0fc6abc84eb21527596e7cc8 \ - --hash=sha256:b2c3da8d93cf5db60e8858c17684c47d01fee6405e554fb55018dd85fc23b178 \ - --hash=sha256:b2c7fdaa4d7c3d886a42534adec7cfac73860b89b4e5298752f60aa5984641a0 \ - --hash=sha256:b30d46379644fbfc3ab81f8f82ae4de55179414651f110a1514f0b1f8f6cb2d7 \ - --hash=sha256:b42f4d86b451c2f9d06ffb4f8bbc776e04df3ba070b9fe2657804b1b40277c48 \ - --hash=sha256:b738f7e648735714bbb82bdfd030203360cfeab7f6e8a34772b3c8c8b820568c \ - --hash=sha256:b7fc49c37f1786284b12af63152fe1d0990722497e2d5817acfe7a877522f9a9 \ - --hash=sha256:b8f18914faec94132e5b91e69d76a5c1d7b0c73e2489ea8929c4aaa10b76bbf7 \ - --hash=sha256:bb2f6ca0ae2d983ded09357b84af659c954722bbf04dea98030064996d156048 \ - --hash=sha256:bb4c1847b303835d89d785a18801a883436cdfd5dc3d62947f9c49e24f0f5a2c \ - --hash=sha256:bc456d04db0515ce3320d714a1eac7a97774ff0849e7718b492d957da4631dd4 \ - --hash=sha256:bc532422ff26b304cfb62b328826bd995c96154ffd2bac4544f37dbb95ecaa8f \ - --hash=sha256:be3aaa60da67e6153eb15715cc2e19091af5dc75faef8b8a585aea372507384b \ - --hash=sha256:c33e66d44fe60e72397b487ee92e01da0d09ba2d66df8eae42d77b6d06e5eba0 \ - --hash=sha256:c371aa98126a0d4c739ca93ceffa0fd7a5d732e3ac66a46e74339acd4d334564 \ - --hash=sha256:c54d83a2188a10ebdba573f16bd97135d06c9ef60c3dc495315c7a28c80a263f \ - --hash=sha256:c7d13103045de1bdd6fe5d61802565f1a3537d70cd3abf596aa0af62761921ee \ - --hash=sha256:cb233f9c95f83707dae461b12b720c1af9c28c2d19208e1be03387222151daf5 \ - --hash=sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62 \ - --hash=sha256:cdcbed9ad19da81c480dfd6dd161886db6096083c9938ead313d94b30aadf272 \ - --hash=sha256:d100fcc8930d697c6561156c6810ab4a508fb264c8b6779e6e61e2ed5e7558f9 \ - --hash=sha256:d4aec24d6b72ee457ec665344a29acb2d35937d5192faebe429ea02633151aad \ - --hash=sha256:d6690ec5ec1cce0385cb20896b16be35247ac8c2046e493d03232f1c2414d321 \ - --hash=sha256:d759cdd7f3e055d6bc8d9bec3ad905227b2e4c785dc16c372eb5b5e83123f48a \ - --hash=sha256:da08e7bb297b04e893d91087df19638dc7a6bb858a954b0cc2b9f5053c922312 \ - --hash=sha256:dacf3c64ef3f7440e3167aa4b49aa9e0fb99e0aa4f9ff03795640bf94531bcb0 \ - --hash=sha256:daf42de090d59db025af61ce6bdb2521f0f102ea0e6ea310f13c17610a97da4c \ - --hash=sha256:dc051506c30b609238d79eda75ee9cab3e520570ec8219844a72a46020901e37 \ - --hash=sha256:de496365750cc472b4e7902a485d3f152ecf57bd3ba03ddd5578ed8ceb4c5964 \ - --hash=sha256:dfb874cfa53340009af6bdd7e54ebc0d21012a60a4e65d927c2e477112e63484 \ - --hash=sha256:e19e0643cc936a22e837f79d01a550678da8377d7d801a14487c10c34ee49c7e \ - --hash=sha256:e237b807d68a61fc3b1e845407e27e5eb8ef69bc93fe8505337c1acb4ee300b6 \ - --hash=sha256:e5867f2651016a3afd8dd2c8238baa66f1e2802f44bc17e236f547ace6647078 \ - --hash=sha256:e748d4cf8fef2526bb2a589a417eba0c8674e29ffcb570ce2ceca44f1e567bf6 \ - --hash=sha256:e77dd455b9a16bbd2a5036a63ddbd479c19572af81b624e79ef422f929eef388 \ - --hash=sha256:e8113639f3296706fbac34a30813929e29247718e88173ad849f57ca59754924 \ - --hash=sha256:e8cd2415f372e7e5a789d743d133ae474290a90b9023197fd78f32e2dc6873e2 \ - --hash=sha256:eb2a12d704f180a902d7fa778c6d71f36ceb7b0d317f34cdc76a5d05aa1dd1df \ - --hash=sha256:ef9266d2aa545d7374938fb5c484531ef5a2ec7f2d573e62f8ce722c735685fd \ - --hash=sha256:f2a50c3c1d11cad0ebebbac357a97b26aa79d2bcaf46f256551152aa85d3a4d1 \ - --hash=sha256:f2e3b1a6bb38de0bc713edd4d612969dd250ca8b724be8d460001a387507021c \ - --hash=sha256:f952dacaa552f3bb8834908dddd500ba7d508e6ea6eb8c52eb2d28f48ca06a31 \ - --hash=sha256:fa25afbadead523f7001caf0c2382afd272c315a033a7b06336da2637d92d6ed \ - --hash=sha256:fb8dae0b6b8b7f9e96c26fdd8121522ce5de9bb5538010870bd538683d30e9a2 \ - --hash=sha256:fbc74f42c3525ac4ffa4b89cbdd00057b6196bcefe8bce794abd42d33a018092 \ - --hash=sha256:fe659f6b5d10fb5a17f00a50eb903eb277a71ee35df4615db573c069bcf967ac +lxml==6.0.3 \ + --hash=sha256:04b7cedf52e125f86d0d426635e7fbe8e353d4cc272a1757888e3c072424381d \ + --hash=sha256:06b9f3ac459b4565bbaa97aa5512aa7f9a1188c662f0108364f288f6daf35773 \ + --hash=sha256:093786037b934ef4747b0e8a0e1599fe7df7dd8246e7f07d43bba1c4c8bd7b84 \ + --hash=sha256:0a9a79144a8051bc5fbb223fac895b87eb67b361f27b00c2ed4a07ee34246b90 \ + --hash=sha256:0b012cf200736d90f828b3ab4206857772c61b710f0a98d3814c7994decb6652 \ + --hash=sha256:0c46a246df7fbab1f7b018c7eb361585b295ac95dec806158d9ed1e63b477f05 \ + --hash=sha256:10bc4f37c28b4e1b3e901dde66e3a096eb128acf388d5b2962dc2941284293bb \ + --hash=sha256:13f1594a183cee73f9a1dbfd35871c4e04b461f47eeb9bcf80f7d7856b1b136d \ + --hash=sha256:143ac903fb6c9be6da613390825c8e8bb8c8d71517d43882031f6b9bc89770ef \ + --hash=sha256:16e5cbaa1a6351f2abefa4072e9aac1f09103b47fe7ab4496d54e5995b065162 \ + --hash=sha256:16fbcf06ae534b2fa5bcdc19fcf6abd9df2e74fe8563147d1c5a687a130efed4 \ + --hash=sha256:19b079e81aa3a31b523a224b0dd46da4f56e1b1e248eef9a599e5c885c788813 \ + --hash=sha256:1b36a3c73f2a6d9c2bfae78089ca7aedae5c2ee5fd5214a15f00b2f89e558ba7 \ + --hash=sha256:1b60a3a1205f869bd47874787c792087174453b1a869db4837bf5b3ff92be017 \ + --hash=sha256:20f8caa9beb61a688c4428631cb47fd6e0ba75ef30091cec5fee992138b2be77 \ + --hash=sha256:239e9a6be3a79c03ec200d26f7bb17a4414704a208059e20050bf161e2d8848a \ + --hash=sha256:26cdd7c3f4c3b932b28859d0b70966c2ec8b67c106717d6320121002f8f99025 \ + --hash=sha256:2773dbe2cedee81f2769bd5d24ceb4037706cf032e1703513dd0e9476cd9375f \ + --hash=sha256:27e317e554bc6086a082688ddf137437e5f7f20ffdd736a6f5b4e3ed1ecf1247 \ + --hash=sha256:2a49123cc3209ccad7c4c5a4133bcfcfd4875f30461ea4d0aaa84e6608f712c5 \ + --hash=sha256:2ce76d113a7c3bf42761ec1de7ca615b0cbf9d8ae478eb1d6c20111d9c9fc098 \ + --hash=sha256:2d00902610dd91a970a06d5f1a6e4f2426e04a9fa07209d58e09b345e2269267 \ + --hash=sha256:30c437d8bb9a9a9edff27e85b694342e47a26a6abc249abe00584a4824f9d80d \ + --hash=sha256:322c825054d02d35755b80dc5c39ba8a71c7c09c43453394a13b9bd8c0abc84c \ + --hash=sha256:336925309af5ecd9616acbe1c28d68ee0088839b1d42ae7dcc40ffecff959537 \ + --hash=sha256:33741ec3b4268efffae8ba40f9b64523f4489caf270bde175535e659f03af05a \ + --hash=sha256:353161f166e76f0d8228f8f5216d110601d143a8b6d0fd869230e12c098a5842 \ + --hash=sha256:38652c280cf50cc5cf955e3d0b691fa6a97046d84407bbae340d8e353f9014ef \ + --hash=sha256:38acf7171535ffa7fff1fcec8b82ebd4e55cd02e581efe776928108421accaa1 \ + --hash=sha256:3a0484bd1e84f82766befcbd71cccd7307dacfe08071e4dbc1d9a9b498d321e8 \ + --hash=sha256:448e69211e59c39f398990753d15ba49f7218ec128f64ac8012ef16762e509a3 \ + --hash=sha256:46c80f7fd5dd7d8c269f6486b165c8f91c489e323f3a767221fb5b4b2b388d5f \ + --hash=sha256:4723da3e8f4281853c2eaab161b69cc14bc9b0811be4cfa5a1de36df47e0c660 \ + --hash=sha256:4b0f01fb8bdcaf4aa69cf55b2b2f8ef722e4423e1c020e7250dcb89a1d5db38e \ + --hash=sha256:4ff774b43712b0cf40d9888a5494ca39aefe990c946511cc947b9fddcf74a29b \ + --hash=sha256:50293e024afe5e2c25da2be68c8ceca8618912a0701a73f75b488317c8081aa6 \ + --hash=sha256:51014ee2ab2091dcd9cdef92532f0a1addb7c2cc52a2bd70682e441363de5c0d \ + --hash=sha256:5892d2ef99449ebd8e30544af5bc61fd9c30e9e989093a10589766422f6c5e1a \ + --hash=sha256:59ff244cee0270fc4cf5f2ee920d4493ee88d0bcbc6e8465e9ef01439f1785e7 \ + --hash=sha256:5b6913a68d98c58c673667c864500ba31bc9b0f462effac98914e9a92ebacd2e \ + --hash=sha256:5c35e5c3ed300990a46a144d3514465713f812b35dacfa83e928c60db7c90af7 \ + --hash=sha256:5c45bdcdc2ca6cf26fddff3faa5de7a2ed7c7f6016b3de80125313a37f972378 \ + --hash=sha256:5d559a84b2fd583e5bcf8ec4af1ec895f98811684d5fbd6524ea31a04f92d4ad \ + --hash=sha256:609bf136a7339aeca2bd4268c7cd190f33d13118975fe9964eda8e5138f42802 \ + --hash=sha256:61399a5b01d74ec5f009762c74ab6ebf387e58393fc5d78368e12d4f577fea29 \ + --hash=sha256:6289cb9145fbbc5b0e159c9fcd7fc09446dadc6b60b72c4d1012e80c7c727970 \ + --hash=sha256:631567ffc3ddb989ccdcd28f6b9fa5aab1ec7fc0e99fe65572b006a6aad347e2 \ + --hash=sha256:6364aa77b13e04459df6a9d2b806465287e7540955527e75ebd5fda48532913d \ + --hash=sha256:6556b3197bd8a237a16fcd7278d09f094c5777ae36a1435b5e8e488826386d96 \ + --hash=sha256:6c055bafdcb53e7f9f75e22c009cd183dd410475e21c296d599531d7f03d1bf5 \ + --hash=sha256:724b26a38cef98d6869d00a33cb66083bee967598e44f6a8e53f1dd283c851b0 \ + --hash=sha256:72d108ef9e39f45c6865ea8a5ba6736c0b1a33ddd6343653775349869e58c30b \ + --hash=sha256:7373ede7ccb89e6f6e39c1423b3a4d4ee48035d3b4619a6addced5c8b48d0ecc \ + --hash=sha256:738aef404c862d2c3cd951364ee7175c9d50e8290f5726611c4208c0fba8d186 \ + --hash=sha256:773c22d3de2dd5454b0f89b36d366fa0052f0e924656506c40462d8107acd00f \ + --hash=sha256:775266571f7027b1d77f5fce18a247b24f51a4404bdc1b90ec56be9b1e3801b9 \ + --hash=sha256:794b42f0112adfa3f23670aba5bc0ac9c9adfcee699c0df129b0186c812ac3ff \ + --hash=sha256:7966fbce2d18fde579d5593933d36ad98cc7c8dc7f2b1916d127057ce0415062 \ + --hash=sha256:7f753db5785ce019d7b25bb75638ef5a42a0e208aa9f19933262134e668ca6af \ + --hash=sha256:809726d4c72f1a902556df822c3acc5780053a12a05e16eac999392b30984c06 \ + --hash=sha256:821fd53699eb498990c915ba955a392d07246454c9405e6c1d0692362503013d \ + --hash=sha256:8243937d4673b46da90b4f5ea2627fd26842225e62e885828fdb8133aa1f7b32 \ + --hash=sha256:8341c446fca7f6be003c60aededf2f23a53d4881cf7e0bafb9cef69c217ae26a \ + --hash=sha256:83c1d75e9d124ab82a4ddaf59135112f0dc49526b47355e5928ae6126a68e236 \ + --hash=sha256:83eca62141314d641ebe8089ffa532bbf572ea07dd6255b58c40130d06bb2509 \ + --hash=sha256:841b89fc3d910d61c7c267db6bb7dc3a8b3dac240edb66220fcdf96fe70a0552 \ + --hash=sha256:87bebd6836e88c0a007f66b89814daf5d7041430eb491c91d1851abc89aa6e93 \ + --hash=sha256:88c524cf8c3b8d71dfc3de6cfb225138a876862a92d88bfa22eb9ff020729d45 \ + --hash=sha256:8922a30704a4421d69a19e0499db5861da686c0bccc3a79cf3946e3155cf25f9 \ + --hash=sha256:89f8746c206d8cf2c167221831645d6cc2b24464afd9c428a5eb3fd34c584eb1 \ + --hash=sha256:8b81ec1ecac3be8c1ff1e00ca1c1baf8122e87db9000cd2549963847bd5e3b41 \ + --hash=sha256:8c082ad2398664213a4bb5d133e2eb8bf239220b7d6688f8c8ffa9050057501f \ + --hash=sha256:8c08926678852a233bf1ef645c4d683d56107f814482f8f41b21ef2c7659790e \ + --hash=sha256:8d10a75e4d0a6a9ac2fec2f7ade682f468b51935102c70dab638fa4e94ffcb04 \ + --hash=sha256:8eeec925ad7f81886d413b3a1f8715551f75543519229a9b35e957771e1826d5 \ + --hash=sha256:911dbd0e87729016402e03533117ffe94147bfbcd7902b76af5854c4b437e096 \ + --hash=sha256:955550c78afb2be47755bd1b8153724292a5b539cf3f21665b310c145d08e6f8 \ + --hash=sha256:976b56bd0f4ca72280b4569eb227d012a541860f0d6fcc128ce26d22ef82c845 \ + --hash=sha256:99457524afd384c330dc51e527976653d543ccadfa815d9f2d92c5911626e536 \ + --hash=sha256:9a1adb0e220cb8691202ba9d97646a06292657a122df4b92733861d42f7cf4d2 \ + --hash=sha256:9b8e0779780026979f217603385995202f364adc9807bd21210d81b9f562fc4e \ + --hash=sha256:9d98063e6ae0da5084ec46952bb0a5ccb5e2cad168e32b4d65d1ec84e4b4ebd4 \ + --hash=sha256:a10f9967859229cae38b1aa7a96eb655c96b8adc96989b52c5b1f77d963a77a4 \ + --hash=sha256:a1664c5139755df44cab3834f4400b331b02205d62d3fdcb1554f63439bf3372 \ + --hash=sha256:a1f258e6aa0e6eda2c1199f5582c062c96c7d4a28d96d0c4daa79e39b3f2a764 \ + --hash=sha256:a4dc9f81707b9b56888fa7d3a889ac5219724cf0fbecab90ea5b197faf649534 \ + --hash=sha256:a6380c5035598e4665272ad3fc86c96ddb2a220d4059cce5ba4b660f78346ad9 \ + --hash=sha256:aa18653b795d2c273b8676f7ad2ca916d846d15864e335f746658e4c28eb5168 \ + --hash=sha256:abc39c4fb67f029400608f9a3a4a3f351ccb3c061b05fd3ad113e4cfbba8a8ee \ + --hash=sha256:ac2d6cdafa29672d6a604c641bf67ace3fd0735ec6885501a94943379219ddbf \ + --hash=sha256:ac63a1ef1899ccadace10ac937c41321672771378374c254e931d001448ae372 \ + --hash=sha256:ac65c08ba1bd90f662cb1d5c79f7ae4c53b1c100f0bb6ec5df1f40ac29028a7e \ + --hash=sha256:ad6952810349cbfb843fe15e8afc580b2712359ae42b1d2b05d097bd48c4aea4 \ + --hash=sha256:b044fe3bdb8b68efa33cb5917ae9379f07ec2e416ecd18cf5d333650d6d2fcbb \ + --hash=sha256:b29300eeaadf85df7f2df4bb29cadfb13b9600d1bb8053f35d82d96f9e6d088a \ + --hash=sha256:b683665d0287308adafc90a5617a51a508d8af8c7040693693bb333b5f4474fe \ + --hash=sha256:b68c29aac4788438b07d768057836de47589c7deaa3ad8dc4af488dfc27be388 \ + --hash=sha256:bd4f70e091f2df300396bc9ce36963f90b87611324c2ca750072a6e6375beba2 \ + --hash=sha256:bf98f5f87f6484302e7cce4e2ca5af43562902852063d916c3e2f1c115fdce60 \ + --hash=sha256:c137f8c8419c3de93e2998131d94628805f148e52b34da6d7533454e4d78bc2a \ + --hash=sha256:c157bfef4e3b19688eb4da783c5bfabf5a3ac1ac8d317e0906f3feb18d4c89b7 \ + --hash=sha256:c3de55b53f69ffa2fcfd897bd8a7e62f0f88a40a8a0c544e171e813f9d4ddbf5 \ + --hash=sha256:c4fff7d77f440378cd841e340398edf5dbefee334816efbf521bb6e31651e54e \ + --hash=sha256:c71a387ea133481e725079cff22de45593bf0b834824de22829365ab1d2386c9 \ + --hash=sha256:c8184fdb2259bda1db2db9d6e25f667769afc2531830b4fa29f83f66a7872dea \ + --hash=sha256:c8e3b8a54e65393ce1d5c7d9753fe756f0d96089e7163b20ddec3e5bb56a963e \ + --hash=sha256:cbc7ce67f85b92db97c92219985432be84dc1ba9a028e68c6933e89551234df2 \ + --hash=sha256:cbffd22fc8e4d80454efa968b0c93440a00b8b8a817ce0c29d2c6cb5ad324362 \ + --hash=sha256:ce01ab3449015358f766a1950b3d818eedf9d4cdec3fa87e4eecaad10c0784db \ + --hash=sha256:d1f14c1006722824c3f2158d147e520a82460b47ffdc2a84e444b3d244b65e4d \ + --hash=sha256:d20af2784c763928d0d0879cbc5a3739e4d81eefa0d68962d3478bff4c13e644 \ + --hash=sha256:d38c25bad123d6ce30bb37931d90a4e8a167cd796eeae9cd16c2bfce52718f8e \ + --hash=sha256:d3d65e511e4e656ec67b472110f7a72cbf8547ca15f76fe74cffa4e97412a064 \ + --hash=sha256:d573b81c29e20b1513afa386a544797a99cecde5497e6c77b6dfa4484112c819 \ + --hash=sha256:d8781d812bb8efd47c35651639da38980383ff0d0c1f3269ade23e3a90799079 \ + --hash=sha256:d8a8129bd502de138cdde22eac3990bde8a4efbafc72596baab67a495c48c974 \ + --hash=sha256:d9e779a9c3167d2f158c41b6347fbc9e855f6d5561920a33123beb86463c3f46 \ + --hash=sha256:dfc80c74233fe01157ab550fb12b9d07a2f1fa7c5900cefb484e3bf02e856fbc \ + --hash=sha256:e0c88ca5fb307f7e817fc427681126e4712d3452258577bcb4ca86594c934852 \ + --hash=sha256:e759ff1b244725fef428c6b54f3dab4954c293b2d242a5f2e79db5cc3873de51 \ + --hash=sha256:e8ad05bb1fb4aa20ee201ab2f21c3c7571828e4fad525707437bb1c5f5ab6669 \ + --hash=sha256:ecdded59dc50c0c28f652a98f69a7ada8bd2377248bf48c4a83c81204eb58b33 \ + --hash=sha256:ed31e5852cd938704bc6c7a3822cbf84c7fa00ebfa914a1b4e2392d44f45bdfb \ + --hash=sha256:edccf1157677db1da741d042601754b94af3926310c5763179200718ca738e70 \ + --hash=sha256:f179bae37ad673f57756b59f26833b7922230bef471fdb29492428f152bae8c6 \ + --hash=sha256:f27373113fda6621e4201f529908a24c8a190c2af355aed4711dadca44db4673 \ + --hash=sha256:f297e9be3bbe59c31cfe5d0f38534510ed95856c480df3e8721b16d46ccaeeac \ + --hash=sha256:f8f004d5c601eb50ac29a110632595a4f4c50db81c715d46a43de64ef88246cb \ + --hash=sha256:f96bba9a26a064ce9e11099bad12fb08384b64d3acc0acf94bf386ca5cf4f95f \ + --hash=sha256:fab00cef83d4f9d76c5e0722346e84bc174b071d68b4f725aeb0bf3877b9e6a6 \ + --hash=sha256:fc6eeeddcee4d985707b3fc29fd6993e256e55798ca600586da68d3f0e04ec5a \ + --hash=sha256:fdb7786ebefaa0dad0d399dfeaf146b370a14591af2f3aea59e06f931a426678 \ + --hash=sha256:fddcf558bcb7a40993fb9e3ae3752d5d3a656479c71687799e43063563a2e68a \ + --hash=sha256:feb5b9ed7d0510663a78b94f2b417a41c41b42a7bb157ef398ef9d78e6f0fd50 # via # -c src/backend/requirements.txt # python3-saml @@ -1493,98 +1487,98 @@ pdf2image==1.17.0 \ # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -pillow==12.1.1 \ - --hash=sha256:02f84dfad02693676692746df05b89cf25597560db2857363a208e393429f5e9 \ - --hash=sha256:0330d233c1a0ead844fc097a7d16c0abff4c12e856c0b325f231820fee1f39da \ - --hash=sha256:03edcc34d688572014ff223c125a3f77fb08091e4607e7745002fc214070b35f \ - --hash=sha256:097690ba1f2efdeb165a20469d59d8bb03c55fb6621eb2041a060ae8ea3e9642 \ - --hash=sha256:178aa072084bd88ec759052feca8e56cbb14a60b39322b99a049e58090479713 \ - --hash=sha256:18e5bddd742a44b7e6b1e773ab5db102bd7a94c32555ba656e76d319d19c3850 \ - --hash=sha256:1a9b0ee305220b392e1124a764ee4265bd063e54a751a6b62eff69992f457fa9 \ - --hash=sha256:1f1625b72740fdda5d77b4def688eb8fd6490975d06b909fd19f13f391e077e0 \ - --hash=sha256:1f1be78ce9466a7ee64bfda57bdba0f7cc499d9794d518b854816c41bf0aa4e9 \ - --hash=sha256:1f90cff8aa76835cba5769f0b3121a22bd4eb9e6884cfe338216e557a9a548b8 \ - --hash=sha256:21329ec8c96c6e979cd0dfd29406c40c1d52521a90544463057d2aaa937d66a6 \ - --hash=sha256:2815a87ab27848db0321fb78c7f0b2c8649dee134b7f2b80c6a45c6831d75ccd \ - --hash=sha256:2c1fc0f2ca5f96a3c8407e41cca26a16e46b21060fe6d5b099d2cb01412222f5 \ - --hash=sha256:2e0c664be47252947d870ac0d327fea7e63985a08794758aa8af5b6cb6ec0c9c \ - --hash=sha256:339ffdcb7cbeaa08221cd401d517d4b1fe7a9ed5d400e4a8039719238620ca35 \ - --hash=sha256:344cf1e3dab3be4b1fa08e449323d98a2a3f819ad20f4b22e77a0ede31f0faa1 \ - --hash=sha256:36341d06738a9f66c8287cf8b876d24b18db9bd8740fa0672c74e259ad408cff \ - --hash=sha256:365b10bb9417dd4498c0e3b128018c4a624dc11c7b97d8cc54effe3b096f4c38 \ - --hash=sha256:3a5cbdcddad0af3da87cb16b60d23648bc3b51967eb07223e9fed77a82b457c4 \ - --hash=sha256:417423db963cb4be8bac3fc1204fe61610f6abeed1580a7a2cbb2fbda20f12af \ - --hash=sha256:42fc1f4677106188ad9a55562bbade416f8b55456f522430fadab3cef7cd4e60 \ - --hash=sha256:44ce27545b6efcf0fdbdceb31c9a5bdea9333e664cda58a7e674bb74608b3986 \ - --hash=sha256:472a8d7ded663e6162dafdf20015c486a7009483ca671cece7a9279b512fcb13 \ - --hash=sha256:47b94983da0c642de92ced1702c5b6c292a84bd3a8e1d1702ff923f183594717 \ - --hash=sha256:495c302af3aad1ca67420ddd5c7bd480c8867ad173528767d906428057a11f0e \ - --hash=sha256:4ceb838d4bd9dab43e06c363cab2eebf63846d6a4aeaea283bbdfd8f1a8ed58b \ - --hash=sha256:50480dcd74fa63b8e78235957d302d98d98d82ccbfac4c7e12108ba9ecbdba15 \ - --hash=sha256:518a48c2aab7ce596d3bf79d0e275661b846e86e4d0e7dec34712c30fe07f02a \ - --hash=sha256:559b38da23606e68681337ad74622c4dbba02254fc9cb4488a305dd5975c7eeb \ - --hash=sha256:578510d88c6229d735855e1f278aa305270438d36a05031dfaae5067cc8eb04d \ - --hash=sha256:597bd9c8419bc7c6af5604e55847789b69123bbe25d65cc6ad3012b4f3c98d8b \ - --hash=sha256:5a8eb7ed8d4198bccbd07058416eeec51686b498e784eda166395a23eb99138e \ - --hash=sha256:5c0dd1636633e7e6a0afe7bf6a51a14992b7f8e60de5789018ebbdfae55b040a \ - --hash=sha256:5cb1785d97b0c3d1d1a16bc1d710c4a0049daefc4935f3a8f31f827f4d3d2e7f \ - --hash=sha256:5d1f9575a12bed9e9eedd9a4972834b08c97a352bd17955ccdebfeca5913fa0a \ - --hash=sha256:5d8c41325b382c07799a3682c1c258469ea2ff97103c53717b7893862d0c98ce \ - --hash=sha256:5dae5f21afb91322f2ff791895ddd8889e5e947ff59f71b46041c8ce6db790bc \ - --hash=sha256:600fd103672b925fe62ed08e0d874ea34d692474df6f4bf7ebe148b30f89f39f \ - --hash=sha256:6408a7b064595afcab0a49393a413732a35788f2a5092fdc6266952ed67de586 \ - --hash=sha256:652a2c9ccfb556235b2b501a3a7cf3742148cd22e04b5625c5fe057ea3e3191f \ - --hash=sha256:665e1b916b043cef294bc54d47bf02d87e13f769bc4bc5fa225a24b3a6c5aca9 \ - --hash=sha256:691ab2ac363b8217f7d31b3497108fb1f50faab2f75dfb03284ec2f217e87bf8 \ - --hash=sha256:6c52f062424c523d6c4db85518774cc3d50f5539dd6eed32b8f6229b26f24d40 \ - --hash=sha256:6c6db3b84c87d48d0088943bf33440e0c42370b99b1c2a7989216f7b42eede60 \ - --hash=sha256:7311c0a0dcadb89b36b7025dfd8326ecfa36964e29913074d47382706e516a7c \ - --hash=sha256:7aac39bcf8d4770d089588a2e1dd111cbaa42df5a94be3114222057d68336bd0 \ - --hash=sha256:7b03048319bfc6170e93bd60728a1af51d3dd7704935feb228c4d4faab35d334 \ - --hash=sha256:7e7976bf1910a8116b523b9f9f58bf410f3e8aa330cd9a2bb2953f9266ab49af \ - --hash=sha256:8089c852a56c2966cf18835db62d9b34fef7ba74c726ad943928d494fa7f4735 \ - --hash=sha256:86172b0831b82ce4f7877f280055892b31179e1576aa00d0df3bb1bbf8c3e524 \ - --hash=sha256:89b54027a766529136a06cfebeecb3a04900397a3590fd252160b888479517bf \ - --hash=sha256:89c7e895002bbe49cdc5426150377cbbc04767d7547ed145473f496dfa40408b \ - --hash=sha256:8b7e5304e34942bf62e15184219a7b5ad4ff7f3bb5cca4d984f37df1a0e1aee2 \ - --hash=sha256:8fd420ef0c52c88b5a035a0886f367748c72147b2b8f384c9d12656678dfdfa9 \ - --hash=sha256:98edb152429ab62a1818039744d8fbb3ccab98a7c29fc3d5fcef158f3f1f68b7 \ - --hash=sha256:99c1506ea77c11531d75e3a412832a13a71c7ebc8192ab9e4b2e355555920e3e \ - --hash=sha256:9ad8fa5937ab05218e2b6a4cff30295ad35afd2f83ac592e68c0d871bb0fdbc4 \ - --hash=sha256:9f51079765661884a486727f0729d29054242f74b46186026582b4e4769918e4 \ - --hash=sha256:a003d7422449f6d1e3a34e3dd4110c22148336918ddbfc6a32581cd54b2e0b2b \ - --hash=sha256:a0b1cd6232e2b618adcc54d9882e4e662a089d5768cd188f7c245b4c8c44a397 \ - --hash=sha256:a285e3eb7a5a45a2ff504e31f4a8d1b12ef62e84e5411c6804a42197c1cf586c \ - --hash=sha256:a37691702ed687799de29a518d63d4682d9016932db66d4e90c345831b02fb4e \ - --hash=sha256:a550ae29b95c6dc13cf69e2c9dc5747f814c54eeb2e32d683e5e93af56caa029 \ - --hash=sha256:ab174cd7d29a62dd139c44bf74b698039328f45cb03b4596c43473a46656b2f3 \ - --hash=sha256:ab323b787d6e18b3d91a72fc99b1a2c28651e4358749842b8f8dfacd28ef2052 \ - --hash=sha256:adebb5bee0f0af4909c30db0d890c773d1a92ffe83da908e2e9e720f8edf3984 \ - --hash=sha256:aee2810642b2898bb187ced9b349e95d2a7272930796e022efaf12e99dccd293 \ - --hash=sha256:af9a332e572978f0218686636610555ae3defd1633597be015ed50289a03c523 \ - --hash=sha256:b574c51cf7d5d62e9be37ba446224b59a2da26dc4c1bb2ecbe936a4fb1a7cb7f \ - --hash=sha256:b66e95d05ba806247aaa1561f080abc7975daf715c30780ff92a20e4ec546e1b \ - --hash=sha256:b81b5e3511211631b3f672a595e3221252c90af017e399056d0faabb9538aa80 \ - --hash=sha256:b957b71c6b2387610f556a7eb0828afbe40b4a98036fc0d2acfa5a44a0c2036f \ - --hash=sha256:bb66b7cc26f50977108790e2456b7921e773f23db5630261102233eb355a3b79 \ - --hash=sha256:c6008de247150668a705a6338156efb92334113421ceecf7438a12c9a12dab23 \ - --hash=sha256:c7697918b5be27424e9ce568193efd13d925c4481dd364e43f5dff72d33e10f8 \ - --hash=sha256:cb9bb857b2d057c6dfc72ac5f3b44836924ba15721882ef103cecb40d002d80e \ - --hash=sha256:cc7d296b5ea4d29e6570dabeaed58d31c3fea35a633a69679fb03d7664f43fb3 \ - --hash=sha256:d242e8ac078781f1de88bf823d70c1a9b3c7950a44cdf4b7c012e22ccbcd8e4e \ - --hash=sha256:d2912fd8114fc5545aa3a4b5576512f64c55a03f3ebcca4c10194d593d43ea36 \ - --hash=sha256:d470ab1178551dd17fdba0fef463359c41aaa613cdcd7ff8373f54be629f9f8f \ - --hash=sha256:d4ce8e329c93845720cd2014659ca67eac35f6433fd3050393d85f3ecef0dad5 \ - --hash=sha256:d6e4571eedf43af33d0fc233a382a76e849badbccdf1ac438841308652a08e1f \ - --hash=sha256:e65498daf4b583091ccbb2556c7000abf0f3349fcd57ef7adc9a84a394ed29f6 \ - --hash=sha256:e879bb6cd5c73848ef3b2b48b8af9ff08c5b71ecda8048b7dd22d8a33f60be32 \ - --hash=sha256:e9e8064fb1cc019296958595f6db671fba95209e3ceb0c4734c9baf97de04b20 \ - --hash=sha256:f7ed2c6543bad5a7d5530eb9e78c53132f93dfa44a28492db88b41cdab885202 \ - --hash=sha256:f95c00d5d6700b2b890479664a06e754974848afaae5e21beb4d83c106923fd0 \ - --hash=sha256:f975aa7ef9684ce7e2c18a3aa8f8e2106ce1e46b94ab713d156b2898811651d3 \ - --hash=sha256:fbfa2a7c10cc2623f412753cddf391c7f971c52ca40a3f65dc5039b2939e8563 \ - --hash=sha256:fc354a04072b765eccf2204f588a7a532c9511e8b9c7f900e1b64e3e33487090 \ - --hash=sha256:fc44ef1f3de4f45b50ccf9136999d71abb99dca7706bc75d222ed350b9fd2289 +pillow==12.2.0 \ + --hash=sha256:00a2865911330191c0b818c59103b58a5e697cae67042366970a6b6f1b20b7f9 \ + --hash=sha256:01afa7cf67f74f09523699b4e88c73fb55c13346d212a59a2db1f86b0a63e8c5 \ + --hash=sha256:03e7e372d5240cc23e9f07deca4d775c0817bffc641b01e9c3af208dbd300987 \ + --hash=sha256:03f6fab9219220f041c74aeaa2939ff0062bd5c364ba9ce037197f4c6d498cd9 \ + --hash=sha256:042db20a421b9bafecc4b84a8b6e444686bd9d836c7fd24542db3e7df7baad9b \ + --hash=sha256:0538bd5e05efec03ae613fd89c4ce0368ecd2ba239cc25b9f9be7ed426b0af1f \ + --hash=sha256:0a34329707af4f73cf1782a36cd2289c0368880654a2c11f027bcee9052d35dd \ + --hash=sha256:0c838a5125cee37e68edec915651521191cef1e6aa336b855f495766e77a366e \ + --hash=sha256:144748b3af2d1b358d41286056d0003f47cb339b8c43a9ea42f5fea4d8c66b6e \ + --hash=sha256:1610dd6c61621ae1cf811bef44d77e149ce3f7b95afe66a4512f8c59f25d9ebe \ + --hash=sha256:1e1757442ed87f4912397c6d35a0db6a7b52592156014706f17658ff58bbf795 \ + --hash=sha256:22db17c68434de69d8ecfc2fe821569195c0c373b25cccb9cbdacf2c6e53c601 \ + --hash=sha256:25373b66e0dd5905ed63fa3cae13c82fbddf3079f2c8bf15c6fb6a35586324c1 \ + --hash=sha256:2bb4a8d594eacdfc59d9e5ad972aa8afdd48d584ffd5f13a937a664c3e7db0ed \ + --hash=sha256:2c727a6d53cb0018aadd8018c2b938376af27914a68a492f59dfcaca650d5eea \ + --hash=sha256:2d192a155bbcec180f8564f693e6fd9bccff5a7af9b32e2e4bf8c9c69dbad6b5 \ + --hash=sha256:2e589959f10d9824d39b350472b92f0ce3b443c0a3442ebf41c40cb8361c5b97 \ + --hash=sha256:2e5a76d03a6c6dcef67edabda7a52494afa4035021a79c8558e14af25313d453 \ + --hash=sha256:325ca0528c6788d2a6c3d40e3568639398137346c3d6e66bb61db96b96511c98 \ + --hash=sha256:34c0d99ecccea270c04882cb3b86e7b57296079c9a4aff88cb3b33563d95afaa \ + --hash=sha256:390ede346628ccc626e5730107cde16c42d3836b89662a115a921f28440e6a3b \ + --hash=sha256:394167b21da716608eac917c60aa9b969421b5dcbbe02ae7f013e7b85811c69d \ + --hash=sha256:3997232e10d2920a68d25191392e3a4487d8183039e1c74c2297f00ed1c50705 \ + --hash=sha256:3adc9215e8be0448ed6e814966ecf3d9952f0ea40eb14e89a102b87f450660d8 \ + --hash=sha256:3e080565d8d7c671db5802eedfb438e5565ffa40115216eabb8cd52d0ecce024 \ + --hash=sha256:4a6c9fa44005fa37a91ebfc95d081e8079757d2e904b27103f4f5fa6f0bf78c0 \ + --hash=sha256:4bfd07bc812fbd20395212969e41931001fd59eb55a60658b0e5710872e95286 \ + --hash=sha256:4e6c62e9d237e9b65fac06857d511e90d8461a32adcc1b9065ea0c0fa3a28150 \ + --hash=sha256:50d8520da2a6ce0af445fa6d648c4273c3eeefbc32d7ce049f22e8b5c3daecc2 \ + --hash=sha256:51c4167c34b0d8ba05b547a3bb23578d0ba17b80a5593f93bd8ecb123dd336a3 \ + --hash=sha256:56a3f9c60a13133a98ecff6197af34d7824de9b7b38c3654861a725c970c197b \ + --hash=sha256:56b25336f502b6ed02e889f4ece894a72612fe885889a6e8c4c80239ff6e5f5f \ + --hash=sha256:57850958fe9c751670e49b2cecf6294acc99e562531f4bd317fa5ddee2068463 \ + --hash=sha256:58f62cc0f00fd29e64b29f4fd923ffdb3859c9f9e6105bfc37ba1d08994e8940 \ + --hash=sha256:5c0a9f29ca8e79f09de89293f82fc9b0270bb4af1d58bc98f540cc4aedf03166 \ + --hash=sha256:5cdfebd752ec52bf5bb4e35d9c64b40826bc5b40a13df7c3cda20a2c03a0f5ed \ + --hash=sha256:5d04bfa02cc2d23b497d1e90a0f927070043f6cbf303e738300532379a4b4e0f \ + --hash=sha256:5d2fd0fa6b5d9d1de415060363433f28da8b1526c1c129020435e186794b3795 \ + --hash=sha256:62f5409336adb0663b7caa0da5c7d9e7bdbaae9ce761d34669420c2a801b2780 \ + --hash=sha256:632ff19b2778e43162304d50da0181ce24ac5bb8180122cbe1bf4673428328c7 \ + --hash=sha256:6562ace0d3fb5f20ed7290f1f929cae41b25ae29528f2af1722966a0a02e2aa1 \ + --hash=sha256:673aa32138f3e7531ccdbca7b3901dba9b70940a19ccecc6a37c77d5fdeb05b5 \ + --hash=sha256:6a6e67ea2e6feda684ed370f9a1c52e7a243631c025ba42149a2cc5934dec295 \ + --hash=sha256:6a9adfc6d24b10f89588096364cc726174118c62130c817c2837c60cf08a392b \ + --hash=sha256:6bb77b2dcb06b20f9f4b4a8454caa581cd4dd0643a08bacf821216a16d9c8354 \ + --hash=sha256:6e6b2a0c538fc200b38ff9eb6628228b77908c319a005815f2dde585a0664b60 \ + --hash=sha256:71cde9a1e1551df7d34a25462fc60325e8a11a82cc2e2f54578e5e9a1e153d65 \ + --hash=sha256:7371b48c4fa448d20d2714c9a1f775a81155050d383333e0a6c15b1123dda005 \ + --hash=sha256:766cef22385fa1091258ad7e6216792b156dc16d8d3fa607e7545b2b72061f1c \ + --hash=sha256:7b14cc0106cd9aecda615dd6903840a058b4700fcb817687d0ee4fc8b6e389be \ + --hash=sha256:7f84204dee22a783350679a0333981df803dac21a0190d706a50475e361c93f5 \ + --hash=sha256:8023abc91fba39036dbce14a7d6535632f99c0b857807cbbbf21ecc9f4717f06 \ + --hash=sha256:80b2da48193b2f33ed0c32c38140f9d3186583ce7d516526d462645fd98660ae \ + --hash=sha256:8297651f5b5679c19968abefd6bb84d95fe30ef712eb1b2d9b2d31ca61267f4c \ + --hash=sha256:88d387ff40b3ff7c274947ed3125dedf5262ec6919d83946753b5f3d7c67ea4c \ + --hash=sha256:88ddbc66737e277852913bd1e07c150cc7bb124539f94c4e2df5344494e0a612 \ + --hash=sha256:8bd7903a5f2a4545f6fd5935c90058b89d30045568985a71c79f5fd6edf9b91e \ + --hash=sha256:8be29e59487a79f173507c30ddf57e733a357f67881430449bb32614075a40ab \ + --hash=sha256:8c984051042858021a54926eb597d6ee3012393ce9c181814115df4c60b9a808 \ + --hash=sha256:8cbeb542b2ebc6fcdacabf8aca8c1a97c9b3ad3927d46b8723f9d4f033288a0f \ + --hash=sha256:8e9c4f5b3c546fa3458a29ab22646c1c6c787ea8f5ef51300e5a60300736905e \ + --hash=sha256:90e6f81de50ad6b534cab6e5aef77ff6e37722b2f5d908686f4a5c9eba17a909 \ + --hash=sha256:975385f4776fafde056abb318f612ef6285b10a1f12b8570f3647ad0d74b48ec \ + --hash=sha256:9a8a34cc89c67a65ea7437ce257cea81a9dad65b29805f3ecee8c8fe8ff25ffe \ + --hash=sha256:9aba9a17b623ef750a4d11b742cbafffeb48a869821252b30ee21b5e91392c50 \ + --hash=sha256:9f08483a632889536b8139663db60f6724bfcb443c96f1b18855860d7d5c0fd4 \ + --hash=sha256:a4e8f36e677d3336f35089648c8955c51c6d386a13cf6ee9c189c5f5bd713a9f \ + --hash=sha256:a52edc8bfff4429aaabdf4d9ee0daadbbf8562364f940937b941f87a4290f5ff \ + --hash=sha256:a830b1a40919539d07806aa58e1b114df53ddd43213d9c8b75847eee6c0182b5 \ + --hash=sha256:aa88ccfe4e32d362816319ed727a004423aab09c5cea43c01a4b435643fa34eb \ + --hash=sha256:af73337013e0b3b46f175e79492d96845b16126ddf79c438d7ea7ff27783a414 \ + --hash=sha256:b1c1fbd8a5a1af3412a0810d060a78b5136ec0836c8a4ef9aa11807f2a22f4e1 \ + --hash=sha256:b85f66ae9eb53e860a873b858b789217ba505e5e405a24b85c0464822fe88032 \ + --hash=sha256:b86024e52a1b269467a802258c25521e6d742349d760728092e1bc2d135b4d76 \ + --hash=sha256:bd9c0c7a0c681a347b3194c500cb1e6ca9cab053ea4d82a5cf45b6b754560136 \ + --hash=sha256:bfa9c230d2fe991bed5318a5f119bd6780cda2915cca595393649fc118ab895e \ + --hash=sha256:d362d1878f00c142b7e1a16e6e5e780f02be8195123f164edf7eddd911eefe7c \ + --hash=sha256:d5d38f1411c0ed9f97bcb49b7bd59b6b7c314e0e27420e34d99d844b9ce3b6f3 \ + --hash=sha256:dac8d77255a37e81a2efcbd1fc05f1c15ee82200e6c240d7e127e25e365c39ea \ + --hash=sha256:dd025009355c926a84a612fecf58bb315a3f6814b17ead51a8e48d3823d9087f \ + --hash=sha256:deede7c263feb25dba4e82ea23058a235dcc2fe1f6021025dc71f2b618e26104 \ + --hash=sha256:e74473c875d78b8e9d5da2a70f7099549f9eb37ded4e2f6a463e60125bccd176 \ + --hash=sha256:ee3120ae9dff32f121610bb08e4313be87e03efeadfc6c0d18f89127e24d0c24 \ + --hash=sha256:eedf4b74eda2b5a4b2b2fb4c006d6295df3bf29e459e198c90ea48e130dc75c3 \ + --hash=sha256:efd8c21c98c5cc60653bcb311bef2ce0401642b7ce9d09e03a7da87c878289d4 \ + --hash=sha256:f1c943e96e85df3d3478f7b691f229887e143f81fedab9b20205349ab04d73ed \ + --hash=sha256:f278f034eb75b4e8a13a54a876cc4a5ab39173d2cdd93a638e1b467fc545ac43 \ + --hash=sha256:f3f40b3c5a968281fd507d519e444c35f0ff171237f4fdde090dd60699458421 \ + --hash=sha256:f490f9368b6fc026f021db16d7ec2fbf7d89e2edb42e8ec09d2c60505f5729c7 \ + --hash=sha256:fb043ee2f06b41473269765c2feae53fc2e2fbf96e5e22ca94fb5ad677856f06 \ + --hash=sha256:fc3d34d4a8fbec3e88a79b92e5465e0f9b842b628675850d860b8bd300b159f5 # via # -c src/backend/requirements.txt # -r src/backend/requirements.in @@ -1599,15 +1593,15 @@ pint==0.25.3 \ # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -pip-licenses==5.5.1 \ - --hash=sha256:7df370e6e5024a3f7449abf8e4321ef868ba9a795698ad24ab6851f3e7fc65a7 \ - --hash=sha256:ed5e229a93760e529cfa7edaec6630b5a2cd3874c1bddb8019e5f18a723fdead +pip-licenses==5.5.5 \ + --hash=sha256:60750c006adf7a0910347b726e8ee9fee3bc8d2e7c8307a5c4ec0776c8e2a276 \ + --hash=sha256:f4c4c6d9e6a03612cf59f29f19dc8ab54904d82e055b8e191498f2279a224e14 # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -platformdirs==4.9.4 \ - --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ - --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 +platformdirs==4.9.6 \ + --hash=sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a \ + --hash=sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917 # via # -c src/backend/requirements.txt # pint @@ -1717,9 +1711,9 @@ pynacl==1.6.2 \ # via # -c src/backend/requirements.txt # paramiko -pypdf==6.9.2 \ - --hash=sha256:662cf29bcb419a36a1365232449624ab40b7c2d0cfc28e54f42eeecd1fd7e844 \ - --hash=sha256:7f850faf2b0d4ab936582c05da32c52214c2b089d61a316627b5bfb5b0dab46c +pypdf==6.10.2 \ + --hash=sha256:7d09ce108eff6bf67465d461b6ef352dcb8d84f7a91befc02f904455c6eea11d \ + --hash=sha256:aa53be9826655b51c96741e5d7983ca224d898ac0a77896e64636810517624aa # via # -c src/backend/requirements.txt # -r src/backend/requirements.in @@ -1749,9 +1743,9 @@ python-dotenv==1.2.2 \ # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -python-fsutil==0.16.0 \ - --hash=sha256:a60e16bad77e3f00c3dca95433209c823bc45e0ae4158e52969002f3c7957a18 \ - --hash=sha256:dc957a3541215baa935f66f6f15ceb9a8b7f803919c3d99fa57c818fc545f288 +python-fsutil==0.16.1 \ + --hash=sha256:4cc78b9a1e64011cb4fdaeba531e457e649a6a9a560424e841426e47f3a153ad \ + --hash=sha256:bda20802a19f6dc1bd221f6d2a79e0cd2b2c6eaf2b7c353a385c749917047442 # via # -c src/backend/requirements.txt # django-maintenance-mode @@ -1860,90 +1854,90 @@ qrcode[pil]==8.2 \ # -c src/backend/requirements.txt # -r src/backend/requirements.in # django-allauth -rapidfuzz==3.14.3 \ - --hash=sha256:010e12e2411a4854b0434f920e72b717c43f8ec48d57e7affe5c42ecfa05dd0e \ - --hash=sha256:02821366d928e68ddcb567fed8723dad7ea3a979fada6283e6914d5858674850 \ - --hash=sha256:07aa0b5d8863e3151e05026a28e0d924accf0a7a3b605da978f0359bb804df43 \ - --hash=sha256:0e38828d1381a0cceb8a4831212b2f673d46f5129a1897b0451c883eaf4a1747 \ - --hash=sha256:152555187360978119e98ce3e8263d70dd0c40c7541193fc302e9b7125cf8f58 \ - --hash=sha256:1704fc70d214294e554a2421b473779bcdeef715881c5e927dc0f11e1692a0ff \ - --hash=sha256:1b7ef2f4b8583a744338a18f12c69693c194fb6777c0e9ada98cd4d9e8f09d10 \ - --hash=sha256:1b86daa7419b5e8b180690efd1fdbac43ff19230803282521c5b5a9c83977655 \ - --hash=sha256:1d83b8b712fa37e06d59f29a4b49e2e9e8635e908fbc21552fe4d1163db9d2a1 \ - --hash=sha256:1e6eefec45625c634926a9fd46c9e4f31118ac8f3156fff9494422cee45207e6 \ - --hash=sha256:1ec0c8c0c3d4f97ced46b2e191e883f8c82dbbf6d5ebc1842366d7eff13cd5a6 \ - --hash=sha256:1f1925619627f8798f8c3a391d81071336942e5fe8467bc3c567f982e7ce2897 \ - --hash=sha256:1faa0f8f76ba75fd7b142c984947c280ef6558b5067af2ae9b8729b0a0f99ede \ - --hash=sha256:2491937177868bc4b1e469087601d53f925e8d270ccc21e07404b4b5814b7b5f \ - --hash=sha256:2dc37bc20272f388b8c3a4eba4febc6e77e50a8f450c472def4751e7678f55e4 \ - --hash=sha256:32eeafa3abce138bb725550c0e228fc7eaeec7059aa8093d9cbbec2b58c2371a \ - --hash=sha256:33a325ed0e8e1aa20c3e75f8ab057a7b248fdea7843c2a19ade0008906c14af0 \ - --hash=sha256:33da4bbaf44e9755b0ce192597f3bde7372fe2e381ab305f41b707a95ac57aa7 \ - --hash=sha256:37d3c653af15cd88592633e942f5407cb4c64184efab163c40fcebad05f25141 \ - --hash=sha256:3fecce764cf5a991ee2195a844196da840aba72029b2612f95ac68a8b74946bf \ - --hash=sha256:43d0305c36f504232f18ea04e55f2059bb89f169d3119c4ea96a0e15b59e2a91 \ - --hash=sha256:43e38c1305cffae8472572a0584d4ffc2f130865586a81038ca3965301f7c97c \ - --hash=sha256:442125473b247227d3f2de807a11da6c08ccf536572d1be943f8e262bae7e4ea \ - --hash=sha256:442cba39957a008dfc5bdef21a9c3f4379e30ffb4e41b8555dbaf4887eca9300 \ - --hash=sha256:489ce98a895c98cad284f0a47960c3e264c724cb4cfd47a1430fa091c0c25204 \ - --hash=sha256:4ad73afb688b36864a8d9b7344a9cf6da186c471e5790cbf541a635ee0f457f2 \ - --hash=sha256:4b39921df948388a863f0e267edf2c36302983459b021ab928d4b801cbe6a421 \ - --hash=sha256:4e49c9e992bc5fc873bd0fff7ef16a4405130ec42f2ce3d2b735ba5d3d4eb70f \ - --hash=sha256:52619d25a09546b8db078981ca88939d72caa6b8701edd8b22e16482a38e799f \ - --hash=sha256:54fa03062124e73086dae66a3451c553c1e20a39c077fd704dc7154092c34c63 \ - --hash=sha256:56fefb4382bb12250f164250240b9dd7772e41c5c8ae976fd598a32292449cc5 \ - --hash=sha256:576e4b9012a67e0bf54fccb69a7b6c94d4e86a9540a62f1a5144977359133583 \ - --hash=sha256:57f878330c8d361b2ce76cebb8e3e1dc827293b6abf404e67d53260d27b5d941 \ - --hash=sha256:5cfc3d57abd83c734d1714ec39c88a34dd69c85474918ebc21296f1e61eb5ca8 \ - --hash=sha256:656e52b054d5b5c2524169240e50cfa080b04b1c613c5f90a2465e84888d6f15 \ - --hash=sha256:685c93ea961d135893b5984a5a9851637d23767feabe414ec974f43babbd8226 \ - --hash=sha256:6a014ba09657abfcfeed64b7d09407acb29af436d7fc075b23a298a7e4a6b41c \ - --hash=sha256:6c5f545f454871e6af05753a0172849c82feaf0f521c5ca62ba09e1b382d6382 \ - --hash=sha256:6de00eb84c71476af7d3110cf25d8fe7c792d7f5fa86764ef0b4ca97e78ca3ed \ - --hash=sha256:73b07566bc7e010e7b5bd490fb04bb312e820970180df6b5655e9e6224c137db \ - --hash=sha256:769f31c60cd79420188fcdb3c823227fc4a6deb35cafec9d14045c7f6743acae \ - --hash=sha256:7ba009977601d8b0828bfac9a110b195b3e4e79b350dcfa48c11269a9f1918a0 \ - --hash=sha256:7ccbf68100c170e9a0581accbe9291850936711548c6688ce3bfb897b8c589ad \ - --hash=sha256:7cf174b52cb3ef5d49e45d0a1133b7e7d0ecf770ed01f97ae9962c5c91d97d23 \ - --hash=sha256:7d9af908c2f371bfb9c985bd134e295038e3031e666e4b2ade1e7cb7f5af2f1a \ - --hash=sha256:834d1e818005ed0d4ae38f6b87b86fad9b0a74085467ece0727d20e15077c094 \ - --hash=sha256:8383b6d0d92f6cd008f3c9216535be215a064b2cc890398a678b56e6d280cb63 \ - --hash=sha256:89acb8cbb52904f763e5ac238083b9fc193bed8d1f03c80568b20e4cef43a519 \ - --hash=sha256:948b00e8476a91f510dd1ec07272efc7d78c275d83b630455559671d4e33b678 \ - --hash=sha256:9ec02e62ae765a318d6de38df609c57fc6dacc65c0ed1fd489036834fd8a620c \ - --hash=sha256:a0a28add871425c2fe94358c6300bbeb0bc2ed828ca003420ac6825408f5a424 \ - --hash=sha256:a2135b138bcdcb4c3742d417f215ac2d8c2b87bde15b0feede231ae95f09ec41 \ - --hash=sha256:adb44d996fc610c7da8c5048775b21db60dd63b1548f078e95858c05c86876a3 \ - --hash=sha256:b5100fd6bcee4d27f28f4e0a1c6b5127bc8ba7c2a9959cad9eab0bf4a7ab3329 \ - --hash=sha256:b9fcd4d751a4fffa17aed1dde41647923c72c74af02459ad1222e3b0022da3a1 \ - --hash=sha256:beda6aa9bc44d1d81242e7b291b446be352d3451f8217fcb068fc2933927d53b \ - --hash=sha256:c5fb2d978a601820d2cfd111e2c221a9a7bfdf84b41a3ccbb96ceef29f2f1ac7 \ - --hash=sha256:c71ce6d4231e5ef2e33caa952bfe671cb9fd42e2afb11952df9fad41d5c821f9 \ - --hash=sha256:c7bd1816db05d6c5ffb3a4df0a2b7b56fb8c81ef584d08e37058afa217da91b1 \ - --hash=sha256:c7e40c0a0af02ad6e57e89f62bef8604f55a04ecae90b0ceeda591bbf5923317 \ - --hash=sha256:cc594bbcd3c62f647dfac66800f307beaee56b22aaba1c005e9c4c40ed733923 \ - --hash=sha256:cc65e72790ddfd310c2c8912b45106e3800fefe160b0c2ef4d6b6fec4e826457 \ - --hash=sha256:cec3c0da88562727dd5a5a364bd9efeb535400ff0bfb1443156dd139a1dd7b50 \ - --hash=sha256:cfe8df315ab4e6db4e1be72c5170f8e66021acde22cd2f9d04d2058a9fd8162e \ - --hash=sha256:d1fa009f8b1100e4880868137e7bf0501422898f7674f2adcd85d5a67f041296 \ - --hash=sha256:d7843a1abf0091773a530636fdd2a49a41bcae22f9910b86b4f903e76ddc82dc \ - --hash=sha256:da2a007434323904719158e50f3076a4dadb176ce43df28ed14610c773cc9825 \ - --hash=sha256:dbcb726064b12f356bf10fffdb6db4b6dce5390b23627c08652b3f6e49aa56ae \ - --hash=sha256:dc8c07801df5206b81ed6bd6c35cb520cf9b6c64b9b0d19d699f8633dc942897 \ - --hash=sha256:dea2d113e260a5da0c4003e0a5e9fdf24a9dc2bb9eaa43abd030a1e46ce7837d \ - --hash=sha256:dea97ac3ca18cd3ba8f3d04b5c1fe4aa60e58e8d9b7793d3bd595fdb04128d7a \ - --hash=sha256:dee362e7e79bae940a5e2b3f6d09c6554db6a4e301cc68343886c08be99844f1 \ - --hash=sha256:e195a77d06c03c98b3fc06b8a28576ba824392ce40de8c708f96ce04849a052e \ - --hash=sha256:e6b5e3036976f0fde888687d91be86d81f9ac5f7b02e218913c38285b756be6c \ - --hash=sha256:e6c31a4aa68cfa75d7eede8b0ed24b9e458447db604c2db53f358be9843d81d3 \ - --hash=sha256:e805e52322ae29aa945baf7168b6c898120fbc16d2b8f940b658a5e9e3999253 \ - --hash=sha256:ea188aa00e9bcae8c8411f006a5f2f06c4607a02f24eab0d8dc58566aa911f35 \ - --hash=sha256:ecd7453e02cf072258c3a6b8e930230d789d5d46cc849503729f9ce475d0e785 \ - --hash=sha256:ef6bf930b947bd0735c550683939a032090f1d688dfd8861d6b45307b96fd5c5 \ - --hash=sha256:f3d15d8527e2b293e38ce6e437631af0708df29eafd7c9fc48210854c94472f9 \ - --hash=sha256:f3eb0ff3b75d6fdccd40b55e7414bb859a1cda77c52762c9c82b85569f5088e7 \ - --hash=sha256:fa7c8f26f009f8c673fbfb443792f0cf8cf50c4e18121ff1e285b5e08a94fbdb \ - --hash=sha256:fce3152f94afcfd12f3dd8cf51e48fa606e3cb56719bccebe3b401f43d0714f9 +rapidfuzz==3.14.5 \ + --hash=sha256:0084b687b02b4e569b46d8d6d4ad25659528e6081cd6d067ca453a69035f07e4 \ + --hash=sha256:01550fe5f60fd176aa66b7611289d46dc4aa4b1b904874c7b6d1d54e581c5ec1 \ + --hash=sha256:0298d357e2bc59d572da4db0bc631009b6f8f6c9bc8c11e99a12b833f16b6575 \ + --hash=sha256:068b3e965ca9d9ee4debe40001ae7c3938ba646308afd33cf0c66618147db65c \ + --hash=sha256:071d96b957a33b9296b9284b6350a0fb6d030b154a04efd7c15e56b98b79a517 \ + --hash=sha256:09d6c9ba091854f07817055d795d604179c12a8f308ba4c7d56f3719dfea1646 \ + --hash=sha256:0d3378f471ef440473a396ce2f8e97ee12f89a78b495540e0a5617bbfe895638 \ + --hash=sha256:0ebd1a18e2e47bc0b292a07e6ed9c3642f8aaa672d12253885f599b50807a4f9 \ + --hash=sha256:0f23e37019ec07712d58976b1ab2b889f8649a7f7c2f626a2f34ea9139e79279 \ + --hash=sha256:11bfc2ed8fbe4ab86bd516fadefab126f90e6dcadffa761739fcb304707dfd35 \ + --hash=sha256:13cb79c23ef5516e4c4e3830877be8b19aa75203636be1163d690d37803f6504 \ + --hash=sha256:17a34330cd2a538c1ce5d400b61ba358c5b72c654b928ff87b362e88f8b864c7 \ + --hash=sha256:1a31cc6d7d03e7318a0974c038959c59e19c752b81115f2e9138b3331cd64d45 \ + --hash=sha256:1e910eebca9fd0eba245c0555e764597e8a0cccb673a92da2dc2397050725f48 \ + --hash=sha256:1e989f86113be66574113b9c7bdf4793f3f863d248e47d911b355e05ca6b6b10 \ + --hash=sha256:2e83cd2e25bb4edd97b689d9979d9c3acccdaaf26ceac08212ceece202febcfa \ + --hash=sha256:39ef8658aaf67d51667e7bdaf7096f432333377d8302ac43c70b5df8a4cf89b8 \ + --hash=sha256:3d50e5861872935fece391351cbb5ba21d1bced277cf5e1143d207a0a35f1925 \ + --hash=sha256:3e91dcd2549b8f8d843f98ba03a17e01f3d8b72ce942adbbb6761bc58ffce813 \ + --hash=sha256:419e4397a36e2665ec992d8d64c20ba4b2a42500c76ecadeca78a4f19cb9cc32 \ + --hash=sha256:440d30faaf682ca496170a7f0cc5453ec942e3e079f0fd802c9a7f938dfb50a3 \ + --hash=sha256:46b92a9970dcc34f0096901c792644094cab49554ac3547f35e3aebbdf0a3610 \ + --hash=sha256:478b59bb018a6780d73f33e38d0b3ec5e968a6c1ed42876b993dd456b7aa20e8 \ + --hash=sha256:48bee0b91bebfaec41e1081e351000659ab7570cc4598d617aa04d5bf827f9e6 \ + --hash=sha256:4900143d82071bdda533b00300c40b14b963ff826b3642cc463b6dd0f036585e \ + --hash=sha256:4a60f0057231188e3bd30216f7b4e0f279b11fa4ec818bb6c1d9f014d1562fbc \ + --hash=sha256:56227a61fd3d17b0cd9793132431f3a3d07c8654be96794ba9f89fe0fc8b2d09 \ + --hash=sha256:578e6051f6d5e6200c259b47a103cf06bb875ab5814d17333fc0b5c290b22f4c \ + --hash=sha256:593c00dac4e30231c35bf3b4f1da8ec0998762e9e94425586a5d636fcd57f9d0 \ + --hash=sha256:59b3dba758661a318995655435c6ab20a04ade79fa51e75bc8dc107cac8df280 \ + --hash=sha256:5ab449c9abd0d4e1f8145dce0798a4c822a1a1933d613c764a641bea88b8bdab \ + --hash=sha256:5dfa89d78f22cd773054caff44827b846161a29f2dcf7e78b8f90d086621e502 \ + --hash=sha256:649712823f3abcdc48427147a5384fac15623ba435d0013959b52e6462521397 \ + --hash=sha256:667f40fe9c81ad129b198d236881b00dd9e8314d9cc72d03c3e16bdfe5879051 \ + --hash=sha256:6737b35d5af7479c5bf9710f7b17edd9d2c43128d974d25fb4ea653e42c64609 \ + --hash=sha256:67f3f9d2b444268ab53e47d31bab89954888d23c04c6789f2c727e51fe4b1d13 \ + --hash=sha256:7092a216728f80c960bd6b3807275d1ee318b168986bd5dc523349581d4890b8 \ + --hash=sha256:738c96944d076deeaff70e92b65696ab4f7ecb8081d7791c5403a3257dfaf8ff \ + --hash=sha256:77eac0526899b3c3ad1454bb2b03cdb491d67358ec8ef0c9c48bd61b632b431d \ + --hash=sha256:7d5ca9c7832e6879a707296d1463685f7c243a27846227044504741640caec66 \ + --hash=sha256:7e580cb04ad849ae9b786fa21383c6b994b6e6c1444ad1cb9f22392759d72741 \ + --hash=sha256:8166efddea49fdbc61185559f47593239e4794fd7c9044dd5a789d1a90af852d \ + --hash=sha256:823b1b9d9230809d8edcc18872770764bfe8ef4357995e16744047c8ccf0e489 \ + --hash=sha256:88b7d31ff1cc5e9bc0e4406e6b1fa00b6d37163d50bb58091e9b976ff1129faa \ + --hash=sha256:8c90cdf8516d9057e502aa6003cea71cf5ec27cc44699ca52412b502a04761bb \ + --hash=sha256:8ce1d850b3c0178440efde9e884d98421b5e87ff925f364d6d79e23910d7593f \ + --hash=sha256:8f4a8f5cc84c7ad6bffa0e9947b33eb343ad66e6b53e94fe54378a5508c5ed53 \ + --hash=sha256:93d8da883a35116d6813432177f35e570db5b0a5e30ecb0cbd7cb39c815735df \ + --hash=sha256:95d937e74c1a7a1287dfb03b62a827be08ede10a155cf1af73bbf47f2b73ee6e \ + --hash=sha256:9669753caef7fdc6529f6adcc5883ed98d65976445d9322e7dbdb6b697feee13 \ + --hash=sha256:97131ab2be39043054ee28d99e09efe316e6d53449b7e962dfcf3c2de8b2b246 \ + --hash=sha256:97c6d85283629646fa87acc22c66b30ea9d4de7f6fdf887daa2e30fa041829b5 \ + --hash=sha256:9981d38a703b86f0e315a3cd229fd1906fe1d91c989ed121fb975b3c849f89f5 \ + --hash=sha256:9ad37a0be705b544af6296da8edddc260d10a8ae5462530fc9991f66498bb1f9 \ + --hash=sha256:a2ae6f53f99c9a0eca7a0afc5b4e45fc73bc1dd4ac74c00509031d76df80ed98 \ + --hash=sha256:aac0ad28c686a5e72b81668b906c030ee28050b244544b8af68e12fb32543895 \ + --hash=sha256:af3b859726cd3374287e405e14b9634563c078c5531a4f62375508addebddad1 \ + --hash=sha256:af6a90a4ed2a48fa1a2d17e9d824e6c7c950bea5bad0b707c77fd55751e6bfef \ + --hash=sha256:b002c7994cc9f2bc9d9856f0fbaee6e8072c983873846c92f25cefba5b2a925f \ + --hash=sha256:b486b5218808f6f4dc471b114b1054e63553db69705c97da0271f47bd706aedd \ + --hash=sha256:b9c6bd754d11f6e78ac54e3d86b4b11dc1ba2f13e5fc958899574532897f5a99 \ + --hash=sha256:ba10ac57884ce82112f7ed910b67e7fb6072d8ef2c06e30dc63c0f604a112e0e \ + --hash=sha256:bf5018938208d4597b2e679a4f8cff9fd252f1df53583130ae56281a21801b64 \ + --hash=sha256:c0919d1f89ddf91129906705723118ea09754171e4116f5a5dbc667c7bc9b261 \ + --hash=sha256:c5801a89604c65ab4cc9e91b23bc4076d0ca80efd8c976fb63843d7879a85d7f \ + --hash=sha256:c84af70bcf34e99aee894e46a0f1ac77f17d0ef828179c387407642e2466d28a \ + --hash=sha256:cb2829fedd672dd7107267189dabe2bbe07972801d636014417c6861eb89e358 \ + --hash=sha256:d45e06f60729e07d9b20c205f7e5cff90b6ef2584e852eecf46e045aea69627d \ + --hash=sha256:d7ca16637c0ede8243f84074044bd0b2335a0341421f8227c85756de2d18c819 \ + --hash=sha256:d8375e3da319593389727c3187ccaf3e0e84199accc530866b8e0f2b79af05e9 \ + --hash=sha256:dfa552338f51aec280f17b02d28bace1e162d1a84ccd80e3339a57f98aedb56b \ + --hash=sha256:dfef96543ced67d9513a422755db422ae1dc34dade0a1485e0b43e7342ed3ebf \ + --hash=sha256:e012177c8e8a8a0754ae0d6027d63042aa5ff036d9f40f07cb3466a6082e21b8 \ + --hash=sha256:e251126d48615e1f02b4a178f2cd0cd4f0332b8a019c01a2e10480f7552554b4 \ + --hash=sha256:e52da10236aa6212de71b9e170bace65b64b129c0dea7fc243d6c9ce976f5074 \ + --hash=sha256:eacb434410b8d9ca99a8d42352ef085cf423e3c76c1f0b86be2fcba3bff2952c \ + --hash=sha256:ebd8fd343bf8492a1e60bcb6dc99f90f74f65d98d8241a6b3e1fed225b76ecd6 \ + --hash=sha256:f0b2af76b7e7060c09e1a0dfa9410eb19369cbe6164509bff2ef94094b54d2b6 \ + --hash=sha256:f2073495a7f9b75e57e600747ac09510d67683fd64d3228e009740b7ef88f9fe \ + --hash=sha256:f4c1bca487a17fe4226b4ffb2d30e799d2b274d692cffa76bd0746f56235fca3 \ + --hash=sha256:f9fff308486bbd2c8c24f25e8e152c7594d3fe8db265a2d6a1ce24d58671127f \ + --hash=sha256:fbf1b8bb2695415b347f3727da1addca2acb82c9b97ac86bebf8b1bead1eb12d \ + --hash=sha256:feedf219672eef83ea6be6f3bb093bba396a8560fc75be85ba225f082903df0a # via # -c src/backend/requirements.txt # -r src/backend/requirements.in @@ -1960,9 +1954,9 @@ referencing==0.37.0 \ # -c src/backend/requirements.txt # jsonschema # jsonschema-specifications -requests==2.33.0 \ - --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ - --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 +requests==2.33.1 \ + --hash=sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517 \ + --hash=sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a # via # -c src/backend/requirements.txt # django-allauth @@ -2095,9 +2089,9 @@ s3transfer==0.16.0 \ # via # -c src/backend/requirements.txt # boto3 -sentry-sdk==2.56.0 \ - --hash=sha256:5afafb744ceb91d22f4cc650c6bd048ac6af5f7412dcc6c59305a2e36f4dbc02 \ - --hash=sha256:fdab72030b69625665b2eeb9738bdde748ad254e8073085a0ce95382678e8168 +sentry-sdk==2.57.0 \ + --hash=sha256:4be8d1e71c32fb27f79c577a337ac8912137bba4bcbc64a4ec1da4d6d8dc5199 \ + --hash=sha256:812c8bf5ff3d2f0e89c82f5ce80ab3a6423e102729c4706af7413fd1eb480585 # via # -c src/backend/requirements.txt # -r src/backend/requirements.in @@ -2168,9 +2162,9 @@ typing-extensions==4.15.0 \ # opentelemetry-semantic-conventions # pint # py-moneyed -tzdata==2025.3 \ - --hash=sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 \ - --hash=sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7 +tzdata==2026.1 \ + --hash=sha256:4b1d2be7ac37ceafd7327b961aa3a54e467efbdb563a23655fbfe0d39cfc42a9 \ + --hash=sha256:67658a1903c75917309e753fdc349ac0efd8c27db7a0cb406a25be4840f87f98 # via # -c src/backend/requirements.txt # icalendar diff --git a/src/backend/requirements-dev-3.14.txt b/src/backend/requirements-dev-3.14.txt index 8232196238..c8101c192e 100644 --- a/src/backend/requirements-dev-3.14.txt +++ b/src/backend/requirements-dev-3.14.txt @@ -112,144 +112,144 @@ cfgv==3.5.0 \ --hash=sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0 \ --hash=sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132 # via pre-commit -charset-normalizer==3.4.6 \ - --hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \ - --hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \ - --hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \ - --hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \ - --hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \ - --hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \ - --hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \ - --hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \ - --hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \ - --hash=sha256:1cf0a70018692f85172348fe06d3a4b63f94ecb055e13a00c644d368eb82e5b8 \ - --hash=sha256:1ed80ff870ca6de33f4d953fda4d55654b9a2b340ff39ab32fa3adbcd718f264 \ - --hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \ - --hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \ - --hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \ - --hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \ - --hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \ - --hash=sha256:2bd9d128ef93637a5d7a6af25363cf5dec3fa21cf80e68055aad627f280e8afa \ - --hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \ - --hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \ - --hash=sha256:2f7fdd9b6e6c529d6a2501a2d36b240109e78a8ceaef5687cfcfa2bbe671d297 \ - --hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \ - --hash=sha256:31215157227939b4fb3d740cd23fe27be0439afef67b785a1eb78a3ae69cba9e \ - --hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \ - --hash=sha256:3516bbb8d42169de9e61b8520cbeeeb716f12f4ecfe3fd30a9919aa16c806ca8 \ - --hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \ - --hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \ - --hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \ - --hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \ - --hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \ - --hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \ - --hash=sha256:461598cd852bfa5a61b09cae2b1c02e2efcd166ee5516e243d540ac24bfa68a7 \ - --hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \ - --hash=sha256:48696db7f18afb80a068821504296eb0787d9ce239b91ca15059d1d3eaacf13b \ - --hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \ - --hash=sha256:4d1d02209e06550bdaef34af58e041ad71b88e624f5d825519da3a3308e22687 \ - --hash=sha256:4f41da960b196ea355357285ad1316a00099f22d0929fe168343b99b254729c9 \ - --hash=sha256:517ad0e93394ac532745129ceabdf2696b609ec9f87863d337140317ebce1c14 \ - --hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \ - --hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \ - --hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \ - --hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \ - --hash=sha256:54fae94be3d75f3e573c9a1b5402dc593de19377013c9a0e4285e3d402dd3a2a \ - --hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \ - --hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \ - --hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \ - --hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \ - --hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \ - --hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \ - --hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \ - --hash=sha256:659a1e1b500fac8f2779dd9e1570464e012f43e580371470b45277a27baa7532 \ - --hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \ - --hash=sha256:69dd852c2f0ad631b8b60cfbe25a28c0058a894de5abb566619c205ce0550eae \ - --hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \ - --hash=sha256:71be7e0e01753a89cf024abf7ecb6bca2c81738ead80d43004d9b5e3f1244e64 \ - --hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \ - --hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \ - --hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \ - --hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \ - --hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \ - --hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \ - --hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \ - --hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \ - --hash=sha256:802168e03fba8bbc5ce0d866d589e4b1ca751d06edee69f7f3a19c5a9fe6b597 \ - --hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \ - --hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \ - --hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \ - --hash=sha256:8761ac29b6c81574724322a554605608a9960769ea83d2c73e396f3df896ad54 \ - --hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \ - --hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \ - --hash=sha256:8bc5f0687d796c05b1e28ab0d38a50e6309906ee09375dd3aff6a9c09dd6e8f4 \ - --hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \ - --hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \ - --hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \ - --hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \ - --hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \ - --hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \ - --hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \ - --hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \ - --hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \ - --hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \ - --hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \ - --hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \ - --hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \ - --hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \ - --hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \ - --hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \ - --hash=sha256:ab30e5e3e706e3063bc6de96b118688cb10396b70bb9864a430f67df98c61ecc \ - --hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \ - --hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \ - --hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \ - --hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \ - --hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \ - --hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \ - --hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \ - --hash=sha256:bf625105bb9eef28a56a943fec8c8a98aeb80e7d7db99bd3c388137e6eb2d237 \ - --hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \ - --hash=sha256:c45a03a4c69820a399f1dda9e1d8fbf3562eda46e7720458180302021b08f778 \ - --hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \ - --hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \ - --hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \ - --hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \ - --hash=sha256:d08ec48f0a1c48d75d0356cea971921848fb620fdeba805b28f937e90691209f \ - --hash=sha256:d1a2ee9c1499fc8f86f4521f27a973c914b211ffa87322f4ee33bb35392da2c5 \ - --hash=sha256:d5f5d1e9def3405f60e3ca8232d56f35c98fb7bf581efcc60051ebf53cb8b611 \ - --hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \ - --hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \ - --hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \ - --hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \ - --hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \ - --hash=sha256:df01808ee470038c3f8dc4f48620df7225c49c2d6639e38f96e6d6ac6e6f7b0e \ - --hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \ - --hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \ - --hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \ - --hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \ - --hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \ - --hash=sha256:e8aeb10fcbe92767f0fa69ad5a72deca50d0dca07fbde97848997d778a50c9fe \ - --hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \ - --hash=sha256:ecbbd45615a6885fe3240eb9db73b9e62518b611850fdf8ab08bd56de7ad2b17 \ - --hash=sha256:ee4ec14bc1680d6b0afab9aea2ef27e26d2024f18b24a2d7155a52b60da7e833 \ - --hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \ - --hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \ - --hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \ - --hash=sha256:f50498891691e0864dc3da965f340fada0771f6142a378083dc4608f4ea513e2 \ - --hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \ - --hash=sha256:f61aa92e4aad0be58eb6eb4e0c21acf32cf8065f4b2cae5665da756c4ceef982 \ - --hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \ - --hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \ - --hash=sha256:f98059e4fcd3e3e4e2d632b7cf81c2faae96c43c60b569e9c621468082f1d104 \ - --hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659 +charset-normalizer==3.4.7 \ + --hash=sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc \ + --hash=sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c \ + --hash=sha256:07d9e39b01743c3717745f4c530a6349eadbfa043c7577eef86c502c15df2c67 \ + --hash=sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4 \ + --hash=sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0 \ + --hash=sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c \ + --hash=sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5 \ + --hash=sha256:12a6fff75f6bc66711b73a2f0addfc4c8c15a20e805146a02d147a318962c444 \ + --hash=sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153 \ + --hash=sha256:14265bfe1f09498b9d8ec91e9ec9fa52775edf90fcbde092b25f4a33d444fea9 \ + --hash=sha256:16d971e29578a5e97d7117866d15889a4a07befe0e87e703ed63cd90cb348c01 \ + --hash=sha256:177a0ba5f0211d488e295aaf82707237e331c24788d8d76c96c5a41594723217 \ + --hash=sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b \ + --hash=sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c \ + --hash=sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a \ + --hash=sha256:1dc8b0ea451d6e69735094606991f32867807881400f808a106ee1d963c46a83 \ + --hash=sha256:1efde3cae86c8c273f1eb3b287be7d8499420cf2fe7585c41d370d3e790054a5 \ + --hash=sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7 \ + --hash=sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb \ + --hash=sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c \ + --hash=sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1 \ + --hash=sha256:2cd4a60d0e2fb04537162c62bbbb4182f53541fe0ede35cdf270a1c1e723cc42 \ + --hash=sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab \ + --hash=sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df \ + --hash=sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e \ + --hash=sha256:320ade88cfb846b8cd6b4ddf5ee9e80ee0c1f52401f2456b84ae1ae6a1a5f207 \ + --hash=sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18 \ + --hash=sha256:36836d6ff945a00b88ba1e4572d721e60b5b8c98c155d465f56ad19d68f23734 \ + --hash=sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38 \ + --hash=sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110 \ + --hash=sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18 \ + --hash=sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44 \ + --hash=sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d \ + --hash=sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48 \ + --hash=sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e \ + --hash=sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5 \ + --hash=sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d \ + --hash=sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53 \ + --hash=sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790 \ + --hash=sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c \ + --hash=sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b \ + --hash=sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116 \ + --hash=sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d \ + --hash=sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10 \ + --hash=sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6 \ + --hash=sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2 \ + --hash=sha256:6370e8686f662e6a3941ee48ed4742317cafbe5707e36406e9df792cdb535776 \ + --hash=sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a \ + --hash=sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265 \ + --hash=sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008 \ + --hash=sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943 \ + --hash=sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374 \ + --hash=sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246 \ + --hash=sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e \ + --hash=sha256:6e0d51f618228538a3e8f46bd246f87a6cd030565e015803691603f55e12afb5 \ + --hash=sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616 \ + --hash=sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15 \ + --hash=sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41 \ + --hash=sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960 \ + --hash=sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752 \ + --hash=sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e \ + --hash=sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72 \ + --hash=sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7 \ + --hash=sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8 \ + --hash=sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b \ + --hash=sha256:813c0e0132266c08eb87469a642cb30aaff57c5f426255419572aaeceeaa7bf4 \ + --hash=sha256:82b271f5137d07749f7bf32f70b17ab6eaabedd297e75dce75081a24f76eb545 \ + --hash=sha256:84c018e49c3bf790f9c2771c45e9313a08c2c2a6342b162cd650258b57817706 \ + --hash=sha256:8751d2787c9131302398b11e6c8068053dcb55d5a8964e114b6e196cf16cb366 \ + --hash=sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb \ + --hash=sha256:87fad7d9ba98c86bcb41b2dc8dbb326619be2562af1f8ff50776a39e55721c5a \ + --hash=sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e \ + --hash=sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00 \ + --hash=sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f \ + --hash=sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a \ + --hash=sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1 \ + --hash=sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66 \ + --hash=sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356 \ + --hash=sha256:a6c5863edfbe888d9eff9c8b8087354e27618d9da76425c119293f11712a6319 \ + --hash=sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4 \ + --hash=sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad \ + --hash=sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d \ + --hash=sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5 \ + --hash=sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7 \ + --hash=sha256:aef65cd602a6d0e0ff6f9930fcb1c8fec60dd2cfcb6facaf4bdb0e5873042db0 \ + --hash=sha256:af21eb4409a119e365397b2adbaca4c9ccab56543a65d5dbd9f920d6ac29f686 \ + --hash=sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34 \ + --hash=sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49 \ + --hash=sha256:bb8cc7534f51d9a017b93e3e85b260924f909601c3df002bcdb58ddb4dc41a5c \ + --hash=sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1 \ + --hash=sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e \ + --hash=sha256:bd9b23791fe793e4968dba0c447e12f78e425c59fc0e3b97f6450f4781f3ee60 \ + --hash=sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0 \ + --hash=sha256:c0f081d69a6e58272819b70288d3221a6ee64b98df852631c80f293514d3b274 \ + --hash=sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d \ + --hash=sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0 \ + --hash=sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae \ + --hash=sha256:c593052c465475e64bbfe5dbd81680f64a67fdc752c56d7a0ae205dc8aeefe0f \ + --hash=sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d \ + --hash=sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe \ + --hash=sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3 \ + --hash=sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393 \ + --hash=sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1 \ + --hash=sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af \ + --hash=sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44 \ + --hash=sha256:d61f00a0869d77422d9b2aba989e2d24afa6ffd552af442e0e58de4f35ea6d00 \ + --hash=sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c \ + --hash=sha256:dca4bbc466a95ba9c0234ef56d7dd9509f63da22274589ebd4ed7f1f4d4c54e3 \ + --hash=sha256:dd915403e231e6b1809fe9b6d9fc55cf8fb5e02765ac625d9cd623342a7905d7 \ + --hash=sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd \ + --hash=sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e \ + --hash=sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b \ + --hash=sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8 \ + --hash=sha256:e5f4d355f0a2b1a31bc3edec6795b46324349c9cb25eed068049e4f472fb4259 \ + --hash=sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859 \ + --hash=sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46 \ + --hash=sha256:e80c8378d8f3d83cd3164da1ad2df9e37a666cdde7b1cb2298ed0b558064be30 \ + --hash=sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b \ + --hash=sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46 \ + --hash=sha256:ed065083d0898c9d5b4bbec7b026fd755ff7454e6e8b73a67f8c744b13986e24 \ + --hash=sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a \ + --hash=sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24 \ + --hash=sha256:f22dec1690b584cea26fade98b2435c132c1b5f68e39f5a0b7627cd7ae31f1dc \ + --hash=sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215 \ + --hash=sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063 \ + --hash=sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832 \ + --hash=sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6 \ + --hash=sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79 \ + --hash=sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464 # via # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt # pdfminer-six # requests -click==8.3.1 \ - --hash=sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a \ - --hash=sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6 +click==8.3.2 \ + --hash=sha256:14162b8b3b3550a7d479eafa77dfd3c38d9dc8951f6f69c78913a8f9a7540fd5 \ + --hash=sha256:1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d # via pip-tools coverage[toml]==7.13.5 \ --hash=sha256:012d5319e66e9d5a218834642d6c35d265515a62f01157a45bcc036ecf947256 \ @@ -359,56 +359,56 @@ coverage[toml]==7.13.5 \ --hash=sha256:f70c9ab2595c56f81a89620e22899eea8b212a4041bd728ac6f4a28bf5d3ddd0 \ --hash=sha256:fbabfaceaeb587e16f7008f7795cd80d20ec548dc7f94fbb0d4ec2e038ce563f # via -r src/backend/requirements-dev.in -cryptography==46.0.6 \ - --hash=sha256:02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70 \ - --hash=sha256:063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d \ - --hash=sha256:12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a \ - --hash=sha256:12f0fa16cc247b13c43d56d7b35287ff1569b5b1f4c5e87e92cc4fcc00cd10c0 \ - --hash=sha256:22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97 \ - --hash=sha256:26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30 \ - --hash=sha256:27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759 \ - --hash=sha256:2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c \ - --hash=sha256:2ea0f37e9a9cf0df2952893ad145fd9627d326a59daec9b0802480fa3bcd2ead \ - --hash=sha256:2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275 \ - --hash=sha256:341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58 \ - --hash=sha256:380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f \ - --hash=sha256:3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361 \ - --hash=sha256:3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507 \ - --hash=sha256:456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa \ - --hash=sha256:4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b \ - --hash=sha256:50575a76e2951fe7dbd1f56d181f8c5ceeeb075e9ff88e7ad997d2f42af06e7b \ - --hash=sha256:639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8 \ - --hash=sha256:64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8 \ - --hash=sha256:6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72 \ - --hash=sha256:67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175 \ - --hash=sha256:6728c49e3b2c180ef26f8e9f0a883a2c585638db64cf265b49c9ba10652d430e \ - --hash=sha256:6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124 \ - --hash=sha256:69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a \ - --hash=sha256:760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c \ - --hash=sha256:79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f \ - --hash=sha256:7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d \ - --hash=sha256:7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4 \ - --hash=sha256:7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c \ - --hash=sha256:8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290 \ - --hash=sha256:8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca \ - --hash=sha256:8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d \ - --hash=sha256:90e5f0a7b3be5f40c3a0a0eafb32c681d8d2c181fc2a1bdabe9b3f611d9f6b1a \ - --hash=sha256:97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed \ - --hash=sha256:9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a \ - --hash=sha256:9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb \ - --hash=sha256:a3e84d5ec9ba01f8fd03802b2147ba77f0c8f2617b2aff254cedd551844209c8 \ - --hash=sha256:aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707 \ - --hash=sha256:b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410 \ - --hash=sha256:b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736 \ - --hash=sha256:bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2 \ - --hash=sha256:c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4 \ - --hash=sha256:c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013 \ - --hash=sha256:cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19 \ - --hash=sha256:d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b \ - --hash=sha256:d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738 \ - --hash=sha256:d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463 \ - --hash=sha256:ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77 \ - --hash=sha256:ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4 +cryptography==46.0.7 \ + --hash=sha256:04959522f938493042d595a736e7dbdff6eb6cc2339c11465b3ff89343b65f65 \ + --hash=sha256:128c5edfe5e5938b86b03941e94fac9ee793a94452ad1365c9fc3f4f62216832 \ + --hash=sha256:1d25aee46d0c6f1a501adcddb2d2fee4b979381346a78558ed13e50aa8a59067 \ + --hash=sha256:24402210aa54baae71d99441d15bb5a1919c195398a87b563df84468160a65de \ + --hash=sha256:258514877e15963bd43b558917bc9f54cf7cf866c38aa576ebf47a77ddbc43a4 \ + --hash=sha256:35719dc79d4730d30f1c2b6474bd6acda36ae2dfae1e3c16f2051f215df33ce0 \ + --hash=sha256:397655da831414d165029da9bc483bed2fe0e75dde6a1523ec2fe63f3c46046b \ + --hash=sha256:3986ac1dee6def53797289999eabe84798ad7817f3e97779b5061a95b0ee4968 \ + --hash=sha256:420b1e4109cc95f0e5700eed79908cef9268265c773d3a66f7af1eef53d409ef \ + --hash=sha256:42a1e5f98abb6391717978baf9f90dc28a743b7d9be7f0751a6f56a75d14065b \ + --hash=sha256:462ad5cb1c148a22b2e3bcc5ad52504dff325d17daf5df8d88c17dda1f75f2a4 \ + --hash=sha256:506c4ff91eff4f82bdac7633318a526b1d1309fc07ca76a3ad182cb5b686d6d3 \ + --hash=sha256:5ad9ef796328c5e3c4ceed237a183f5d41d21150f972455a9d926593a1dcb308 \ + --hash=sha256:5d1c02a14ceb9148cc7816249f64f623fbfee39e8c03b3650d842ad3f34d637e \ + --hash=sha256:5e51be372b26ef4ba3de3c167cd3d1022934bc838ae9eaad7e644986d2a3d163 \ + --hash=sha256:60627cf07e0d9274338521205899337c5d18249db56865f943cbe753aa96f40f \ + --hash=sha256:65814c60f8cc400c63131584e3e1fad01235edba2614b61fbfbfa954082db0ee \ + --hash=sha256:73510b83623e080a2c35c62c15298096e2a5dc8d51c3b4e1740211839d0dea77 \ + --hash=sha256:7bbc6ccf49d05ac8f7d7b5e2e2c33830d4fe2061def88210a126d130d7f71a85 \ + --hash=sha256:80406c3065e2c55d7f49a9550fe0c49b3f12e5bfff5dedb727e319e1afb9bf99 \ + --hash=sha256:84d4cced91f0f159a7ddacad249cc077e63195c36aac40b4150e7a57e84fffe7 \ + --hash=sha256:8a469028a86f12eb7d2fe97162d0634026d92a21f3ae0ac87ed1c4a447886c83 \ + --hash=sha256:91bbcb08347344f810cbe49065914fe048949648f6bd5c2519f34619142bbe85 \ + --hash=sha256:935ce7e3cfdb53e3536119a542b839bb94ec1ad081013e9ab9b7cfd478b05006 \ + --hash=sha256:9694078c5d44c157ef3162e3bf3946510b857df5a3955458381d1c7cfc143ddb \ + --hash=sha256:a1529d614f44b863a7b480c6d000fe93b59acee9c82ffa027cfadc77521a9f5e \ + --hash=sha256:abad9dac36cbf55de6eb49badd4016806b3165d396f64925bf2999bcb67837ba \ + --hash=sha256:b36a4695e29fe69215d75960b22577197aca3f7a25b9cf9d165dcfe9d80bc325 \ + --hash=sha256:b7b412817be92117ec5ed95f880defe9cf18a832e8cafacf0a22337dc1981b4d \ + --hash=sha256:c5b1ccd1239f48b7151a65bc6dd54bcfcc15e028c8ac126d3fada09db0e07ef1 \ + --hash=sha256:cbd5fb06b62bd0721e1170273d3f4d5a277044c47ca27ee257025146c34cbdd1 \ + --hash=sha256:cdf1a610ef82abb396451862739e3fc93b071c844399e15b90726ef7470eeaf2 \ + --hash=sha256:cdfbe22376065ffcf8be74dc9a909f032df19bc58a699456a21712d6e5eabfd0 \ + --hash=sha256:d02c738dacda7dc2a74d1b2b3177042009d5cab7c7079db74afc19e56ca1b455 \ + --hash=sha256:d151173275e1728cf7839aaa80c34fe550c04ddb27b34f48c232193df8db5842 \ + --hash=sha256:d23c8ca48e44ee015cd0a54aeccdf9f09004eba9fc96f38c911011d9ff1bd457 \ + --hash=sha256:d3b99c535a9de0adced13d159c5a9cf65c325601aa30f4be08afd680643e9c15 \ + --hash=sha256:d5f7520159cd9c2154eb61eb67548ca05c5774d39e9c2c4339fd793fe7d097b2 \ + --hash=sha256:db0f493b9181c7820c8134437eb8b0b4792085d37dbb24da050476ccb664e59c \ + --hash=sha256:e06acf3c99be55aa3b516397fe42f5855597f430add9c17fa46bf2e0fb34c9bb \ + --hash=sha256:e4cfd68c5f3e0bfdad0d38e023239b96a2fe84146481852dffbcca442c245aa5 \ + --hash=sha256:ea42cbe97209df307fdc3b155f1b6fa2577c0defa8f1f7d3be7d31d189108ad4 \ + --hash=sha256:ebd6daf519b9f189f85c479427bbd6e9c9037862cf8fe89ee35503bd209ed902 \ + --hash=sha256:f247c8c1a1fb45e12586afbb436ef21ff1e80670b2861a90353d9b025583d246 \ + --hash=sha256:fbfd0e5f273877695cb93baf14b185f4878128b250cc9f8e617ea0c025dfb022 \ + --hash=sha256:fc9ab8856ae6cf7c9358430e49b368f3108f050031442eaeb6b9d87e4dcf4e4f \ + --hash=sha256:fcd8eac50d9138c1d7fc53a653ba60a2bee81a505f9f8850b6b2888555a45d0e \ + --hash=sha256:fdd1736fed309b4300346f88f74cd120c27c56852c3838cab416e7a166f67298 \ + --hash=sha256:ffca7aa1d00cf7d6469b988c581598f2259e46215e0140af408966a24cf086ce # via # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt @@ -417,9 +417,9 @@ distlib==0.4.0 \ --hash=sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16 \ --hash=sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d # via virtualenv -django==5.2.12 \ - --hash=sha256:4853482f395c3a151937f6991272540fcbf531464f254a347bf7c89f53c8cff7 \ - --hash=sha256:6b809af7165c73eff5ce1c87fdae75d4da6520d6667f86401ecf55b681eb1eeb +django==5.2.13 \ + --hash=sha256:5788fce61da23788a8ce6f02583765ab060d396720924789f97fa42119d37f7a \ + --hash=sha256:a31589db5188d074c63f0945c3888fad104627dfcc236fb2b97f71f89da33bc4 # via # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt @@ -437,13 +437,13 @@ django-silk==5.5.0 \ django-slowtests==1.1.1 \ --hash=sha256:3c6936d420c9df444ac03625b41d97de043c662bbde61fbcd33e4cd407d0c247 # via -r src/backend/requirements-dev.in -django-stubs==6.0.1 \ - --hash=sha256:d885044bd0876610f3eb969d6b5ed22f386002a879fdcb369cd8efa0502dbbce \ - --hash=sha256:e1ca63634221b57a55e16562b9b6d1849aeee2cabfd0fc026084dbe8aa893366 +django-stubs==6.0.2 \ + --hash=sha256:56d43b5e3741563af0063e5b6283f908c625b0439aa06314268673699d1bdccd \ + --hash=sha256:c3bc84d80421758f3b2ad9e1358e001d719388a8eb106e67c873e606216108d4 # via -r src/backend/requirements-dev.in -django-stubs-ext==6.0.1 \ - --hash=sha256:17415759b9a3f4b4da7998ac3b08c7dc5137f9a019490b918aece1a8a4c2ade4 \ - --hash=sha256:633b280f89c0cbb7e3ce2f2f842e0acc43d8091378e75f84921d6be675d052dc +django-stubs-ext==6.0.2 \ + --hash=sha256:70b7b7ae837e7a6036e2facb64435550bf7cf8143c1a6e802864d4824ce6058c \ + --hash=sha256:b35bdec1995bf49765cc39fa89aa7c23f120a23d0cb0152ab7fb4e48ff7d667b # via django-stubs django-test-migrations==1.5.0 \ --hash=sha256:1cbff04b1e82c5564a6f635284907b381cc11a2ff883adff46776d9126824f07 \ @@ -515,9 +515,9 @@ pip-tools==7.5.3 \ --hash=sha256:3aac0c473240ae90db7213c033401f345b05197293ccbdd2704e52e7a783785e \ --hash=sha256:8fa364779ebc010cbfe17cb9de404457ac733e100840423f28f6955de7742d41 # via -r src/backend/requirements-dev.in -platformdirs==4.9.4 \ - --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ - --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 +platformdirs==4.9.6 \ + --hash=sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a \ + --hash=sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917 # via # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt @@ -550,9 +550,9 @@ pyproject-hooks==1.2.0 \ # via # build # pip-tools -pytest==9.0.2 \ - --hash=sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b \ - --hash=sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11 +pytest==9.0.3 \ + --hash=sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9 \ + --hash=sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c # via # pytest-codspeed # pytest-django @@ -578,9 +578,9 @@ pytest-django==4.12.0 \ --hash=sha256:3ff300c49f8350ba2953b90297d23bf5f589db69545f56f1ec5f8cff5da83e85 \ --hash=sha256:df94ec819a83c8979c8f6de13d9cdfbe76e8c21d39473cfe2b40c9fc9be3c758 # via -r src/backend/requirements-dev.in -python-discovery==1.2.0 \ - --hash=sha256:1e108f1bbe2ed0ef089823d28805d5ad32be8e734b86a5f212bf89b71c266e4a \ - --hash=sha256:7d33e350704818b09e3da2bd419d37e21e7c30db6e0977bb438916e06b41b5b1 +python-discovery==1.2.2 \ + --hash=sha256:876e9c57139eb757cb5878cbdd9ae5379e5d96266c99ef731119e04fffe533bb \ + --hash=sha256:e1ae95d9af875e78f15e19aed0c6137ab1bb49c200f21f5061786490c9585c7a # via virtualenv pyyaml==6.0.3 \ --hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \ @@ -660,9 +660,9 @@ pyyaml==6.0.3 \ # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt # pre-commit -requests==2.33.0 \ - --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ - --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 +requests==2.33.1 \ + --hash=sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517 \ + --hash=sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a # via # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt @@ -711,13 +711,13 @@ ty==0.0.1a21 \ --hash=sha256:e941e9a9d1e54b03eeaf9c3197c26a19cf76009fd5e41e16e5657c1c827bd6d3 \ --hash=sha256:ecf41706b803827b0de8717f32a434dad1e67be9f4b8caf403e12013179ea06a # via -r src/backend/requirements-dev.in -types-psycopg2==2.9.21.20260223 \ - --hash=sha256:78ed70de2e56bc6b5c26c8c1da8e9af54e49fdc3c94d1504609f3519e2b84f02 \ - --hash=sha256:c6228ade72d813b0624f4c03feeb89471950ac27cd0506b5debed6f053086bc8 +types-psycopg2==2.9.21.20260408 \ + --hash=sha256:49b086bfc9e0ce901c6537403ead1c19c75275571040b037af0248a8e48c322f \ + --hash=sha256:bb65cd12f53b6633077fd782607a33065e1f3bf585219c9f786b61ad2b72211c # via django-types -types-pyyaml==6.0.12.20250915 \ - --hash=sha256:0f8b54a528c303f0e6f7165687dd33fafa81c807fcac23f632b63aa624ced1d3 \ - --hash=sha256:e7d4d9e064e89a3b3cae120b4990cd370874d2bf12fa5f46c97018dd5d3c9ab6 +types-pyyaml==6.0.12.20260408 \ + --hash=sha256:92a73f2b8d7f39ef392a38131f76b970f8c66e4c42b3125ae872b7c93b556307 \ + --hash=sha256:fbc42037d12159d9c801ebfcc79ebd28335a7c13b08a4cfbc6916df78fee9384 # via django-stubs typing-extensions==4.15.0 \ --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ @@ -735,9 +735,9 @@ urllib3==2.6.3 \ # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt # requests -virtualenv==21.2.0 \ - --hash=sha256:1720dc3a62ef5b443092e3f499228599045d7fea4c79199770499df8becf9098 \ - --hash=sha256:1bd755b504931164a5a496d217c014d098426cddc79363ad66ac78125f9d908f +virtualenv==21.2.1 \ + --hash=sha256:b66ffe81301766c0d5e2208fc3576652c59d44e7b731fc5f5ed701c9b537fa78 \ + --hash=sha256:bd16b49c53562b28cf1a3ad2f36edb805ad71301dee70ddc449e5c88a9f919a2 # via pre-commit wheel==0.46.3 \ --hash=sha256:4b399d56c9d9338230118d705d9737a2a468ccca63d5e813e2a4fc7815d8bc4d \ diff --git a/src/backend/requirements-dev.txt b/src/backend/requirements-dev.txt index cd6ea345e7..74b270e27f 100644 --- a/src/backend/requirements-dev.txt +++ b/src/backend/requirements-dev.txt @@ -109,143 +109,143 @@ cfgv==3.5.0 \ --hash=sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0 \ --hash=sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132 # via pre-commit -charset-normalizer==3.4.6 \ - --hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \ - --hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \ - --hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \ - --hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \ - --hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \ - --hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \ - --hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \ - --hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \ - --hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \ - --hash=sha256:1cf0a70018692f85172348fe06d3a4b63f94ecb055e13a00c644d368eb82e5b8 \ - --hash=sha256:1ed80ff870ca6de33f4d953fda4d55654b9a2b340ff39ab32fa3adbcd718f264 \ - --hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \ - --hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \ - --hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \ - --hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \ - --hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \ - --hash=sha256:2bd9d128ef93637a5d7a6af25363cf5dec3fa21cf80e68055aad627f280e8afa \ - --hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \ - --hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \ - --hash=sha256:2f7fdd9b6e6c529d6a2501a2d36b240109e78a8ceaef5687cfcfa2bbe671d297 \ - --hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \ - --hash=sha256:31215157227939b4fb3d740cd23fe27be0439afef67b785a1eb78a3ae69cba9e \ - --hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \ - --hash=sha256:3516bbb8d42169de9e61b8520cbeeeb716f12f4ecfe3fd30a9919aa16c806ca8 \ - --hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \ - --hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \ - --hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \ - --hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \ - --hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \ - --hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \ - --hash=sha256:461598cd852bfa5a61b09cae2b1c02e2efcd166ee5516e243d540ac24bfa68a7 \ - --hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \ - --hash=sha256:48696db7f18afb80a068821504296eb0787d9ce239b91ca15059d1d3eaacf13b \ - --hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \ - --hash=sha256:4d1d02209e06550bdaef34af58e041ad71b88e624f5d825519da3a3308e22687 \ - --hash=sha256:4f41da960b196ea355357285ad1316a00099f22d0929fe168343b99b254729c9 \ - --hash=sha256:517ad0e93394ac532745129ceabdf2696b609ec9f87863d337140317ebce1c14 \ - --hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \ - --hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \ - --hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \ - --hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \ - --hash=sha256:54fae94be3d75f3e573c9a1b5402dc593de19377013c9a0e4285e3d402dd3a2a \ - --hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \ - --hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \ - --hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \ - --hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \ - --hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \ - --hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \ - --hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \ - --hash=sha256:659a1e1b500fac8f2779dd9e1570464e012f43e580371470b45277a27baa7532 \ - --hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \ - --hash=sha256:69dd852c2f0ad631b8b60cfbe25a28c0058a894de5abb566619c205ce0550eae \ - --hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \ - --hash=sha256:71be7e0e01753a89cf024abf7ecb6bca2c81738ead80d43004d9b5e3f1244e64 \ - --hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \ - --hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \ - --hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \ - --hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \ - --hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \ - --hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \ - --hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \ - --hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \ - --hash=sha256:802168e03fba8bbc5ce0d866d589e4b1ca751d06edee69f7f3a19c5a9fe6b597 \ - --hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \ - --hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \ - --hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \ - --hash=sha256:8761ac29b6c81574724322a554605608a9960769ea83d2c73e396f3df896ad54 \ - --hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \ - --hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \ - --hash=sha256:8bc5f0687d796c05b1e28ab0d38a50e6309906ee09375dd3aff6a9c09dd6e8f4 \ - --hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \ - --hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \ - --hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \ - --hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \ - --hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \ - --hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \ - --hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \ - --hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \ - --hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \ - --hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \ - --hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \ - --hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \ - --hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \ - --hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \ - --hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \ - --hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \ - --hash=sha256:ab30e5e3e706e3063bc6de96b118688cb10396b70bb9864a430f67df98c61ecc \ - --hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \ - --hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \ - --hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \ - --hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \ - --hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \ - --hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \ - --hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \ - --hash=sha256:bf625105bb9eef28a56a943fec8c8a98aeb80e7d7db99bd3c388137e6eb2d237 \ - --hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \ - --hash=sha256:c45a03a4c69820a399f1dda9e1d8fbf3562eda46e7720458180302021b08f778 \ - --hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \ - --hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \ - --hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \ - --hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \ - --hash=sha256:d08ec48f0a1c48d75d0356cea971921848fb620fdeba805b28f937e90691209f \ - --hash=sha256:d1a2ee9c1499fc8f86f4521f27a973c914b211ffa87322f4ee33bb35392da2c5 \ - --hash=sha256:d5f5d1e9def3405f60e3ca8232d56f35c98fb7bf581efcc60051ebf53cb8b611 \ - --hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \ - --hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \ - --hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \ - --hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \ - --hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \ - --hash=sha256:df01808ee470038c3f8dc4f48620df7225c49c2d6639e38f96e6d6ac6e6f7b0e \ - --hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \ - --hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \ - --hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \ - --hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \ - --hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \ - --hash=sha256:e8aeb10fcbe92767f0fa69ad5a72deca50d0dca07fbde97848997d778a50c9fe \ - --hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \ - --hash=sha256:ecbbd45615a6885fe3240eb9db73b9e62518b611850fdf8ab08bd56de7ad2b17 \ - --hash=sha256:ee4ec14bc1680d6b0afab9aea2ef27e26d2024f18b24a2d7155a52b60da7e833 \ - --hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \ - --hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \ - --hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \ - --hash=sha256:f50498891691e0864dc3da965f340fada0771f6142a378083dc4608f4ea513e2 \ - --hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \ - --hash=sha256:f61aa92e4aad0be58eb6eb4e0c21acf32cf8065f4b2cae5665da756c4ceef982 \ - --hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \ - --hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \ - --hash=sha256:f98059e4fcd3e3e4e2d632b7cf81c2faae96c43c60b569e9c621468082f1d104 \ - --hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659 +charset-normalizer==3.4.7 \ + --hash=sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc \ + --hash=sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c \ + --hash=sha256:07d9e39b01743c3717745f4c530a6349eadbfa043c7577eef86c502c15df2c67 \ + --hash=sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4 \ + --hash=sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0 \ + --hash=sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c \ + --hash=sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5 \ + --hash=sha256:12a6fff75f6bc66711b73a2f0addfc4c8c15a20e805146a02d147a318962c444 \ + --hash=sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153 \ + --hash=sha256:14265bfe1f09498b9d8ec91e9ec9fa52775edf90fcbde092b25f4a33d444fea9 \ + --hash=sha256:16d971e29578a5e97d7117866d15889a4a07befe0e87e703ed63cd90cb348c01 \ + --hash=sha256:177a0ba5f0211d488e295aaf82707237e331c24788d8d76c96c5a41594723217 \ + --hash=sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b \ + --hash=sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c \ + --hash=sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a \ + --hash=sha256:1dc8b0ea451d6e69735094606991f32867807881400f808a106ee1d963c46a83 \ + --hash=sha256:1efde3cae86c8c273f1eb3b287be7d8499420cf2fe7585c41d370d3e790054a5 \ + --hash=sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7 \ + --hash=sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb \ + --hash=sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c \ + --hash=sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1 \ + --hash=sha256:2cd4a60d0e2fb04537162c62bbbb4182f53541fe0ede35cdf270a1c1e723cc42 \ + --hash=sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab \ + --hash=sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df \ + --hash=sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e \ + --hash=sha256:320ade88cfb846b8cd6b4ddf5ee9e80ee0c1f52401f2456b84ae1ae6a1a5f207 \ + --hash=sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18 \ + --hash=sha256:36836d6ff945a00b88ba1e4572d721e60b5b8c98c155d465f56ad19d68f23734 \ + --hash=sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38 \ + --hash=sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110 \ + --hash=sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18 \ + --hash=sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44 \ + --hash=sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d \ + --hash=sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48 \ + --hash=sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e \ + --hash=sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5 \ + --hash=sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d \ + --hash=sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53 \ + --hash=sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790 \ + --hash=sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c \ + --hash=sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b \ + --hash=sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116 \ + --hash=sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d \ + --hash=sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10 \ + --hash=sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6 \ + --hash=sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2 \ + --hash=sha256:6370e8686f662e6a3941ee48ed4742317cafbe5707e36406e9df792cdb535776 \ + --hash=sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a \ + --hash=sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265 \ + --hash=sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008 \ + --hash=sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943 \ + --hash=sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374 \ + --hash=sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246 \ + --hash=sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e \ + --hash=sha256:6e0d51f618228538a3e8f46bd246f87a6cd030565e015803691603f55e12afb5 \ + --hash=sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616 \ + --hash=sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15 \ + --hash=sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41 \ + --hash=sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960 \ + --hash=sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752 \ + --hash=sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e \ + --hash=sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72 \ + --hash=sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7 \ + --hash=sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8 \ + --hash=sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b \ + --hash=sha256:813c0e0132266c08eb87469a642cb30aaff57c5f426255419572aaeceeaa7bf4 \ + --hash=sha256:82b271f5137d07749f7bf32f70b17ab6eaabedd297e75dce75081a24f76eb545 \ + --hash=sha256:84c018e49c3bf790f9c2771c45e9313a08c2c2a6342b162cd650258b57817706 \ + --hash=sha256:8751d2787c9131302398b11e6c8068053dcb55d5a8964e114b6e196cf16cb366 \ + --hash=sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb \ + --hash=sha256:87fad7d9ba98c86bcb41b2dc8dbb326619be2562af1f8ff50776a39e55721c5a \ + --hash=sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e \ + --hash=sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00 \ + --hash=sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f \ + --hash=sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a \ + --hash=sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1 \ + --hash=sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66 \ + --hash=sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356 \ + --hash=sha256:a6c5863edfbe888d9eff9c8b8087354e27618d9da76425c119293f11712a6319 \ + --hash=sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4 \ + --hash=sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad \ + --hash=sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d \ + --hash=sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5 \ + --hash=sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7 \ + --hash=sha256:aef65cd602a6d0e0ff6f9930fcb1c8fec60dd2cfcb6facaf4bdb0e5873042db0 \ + --hash=sha256:af21eb4409a119e365397b2adbaca4c9ccab56543a65d5dbd9f920d6ac29f686 \ + --hash=sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34 \ + --hash=sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49 \ + --hash=sha256:bb8cc7534f51d9a017b93e3e85b260924f909601c3df002bcdb58ddb4dc41a5c \ + --hash=sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1 \ + --hash=sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e \ + --hash=sha256:bd9b23791fe793e4968dba0c447e12f78e425c59fc0e3b97f6450f4781f3ee60 \ + --hash=sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0 \ + --hash=sha256:c0f081d69a6e58272819b70288d3221a6ee64b98df852631c80f293514d3b274 \ + --hash=sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d \ + --hash=sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0 \ + --hash=sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae \ + --hash=sha256:c593052c465475e64bbfe5dbd81680f64a67fdc752c56d7a0ae205dc8aeefe0f \ + --hash=sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d \ + --hash=sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe \ + --hash=sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3 \ + --hash=sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393 \ + --hash=sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1 \ + --hash=sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af \ + --hash=sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44 \ + --hash=sha256:d61f00a0869d77422d9b2aba989e2d24afa6ffd552af442e0e58de4f35ea6d00 \ + --hash=sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c \ + --hash=sha256:dca4bbc466a95ba9c0234ef56d7dd9509f63da22274589ebd4ed7f1f4d4c54e3 \ + --hash=sha256:dd915403e231e6b1809fe9b6d9fc55cf8fb5e02765ac625d9cd623342a7905d7 \ + --hash=sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd \ + --hash=sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e \ + --hash=sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b \ + --hash=sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8 \ + --hash=sha256:e5f4d355f0a2b1a31bc3edec6795b46324349c9cb25eed068049e4f472fb4259 \ + --hash=sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859 \ + --hash=sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46 \ + --hash=sha256:e80c8378d8f3d83cd3164da1ad2df9e37a666cdde7b1cb2298ed0b558064be30 \ + --hash=sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b \ + --hash=sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46 \ + --hash=sha256:ed065083d0898c9d5b4bbec7b026fd755ff7454e6e8b73a67f8c744b13986e24 \ + --hash=sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a \ + --hash=sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24 \ + --hash=sha256:f22dec1690b584cea26fade98b2435c132c1b5f68e39f5a0b7627cd7ae31f1dc \ + --hash=sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215 \ + --hash=sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063 \ + --hash=sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832 \ + --hash=sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6 \ + --hash=sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79 \ + --hash=sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464 # via # -c src/backend/requirements.txt # pdfminer-six # requests -click==8.3.1 \ - --hash=sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a \ - --hash=sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6 +click==8.3.2 \ + --hash=sha256:14162b8b3b3550a7d479eafa77dfd3c38d9dc8951f6f69c78913a8f9a7540fd5 \ + --hash=sha256:1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d # via pip-tools coverage[toml]==7.13.5 \ --hash=sha256:012d5319e66e9d5a218834642d6c35d265515a62f01157a45bcc036ecf947256 \ @@ -355,56 +355,56 @@ coverage[toml]==7.13.5 \ --hash=sha256:f70c9ab2595c56f81a89620e22899eea8b212a4041bd728ac6f4a28bf5d3ddd0 \ --hash=sha256:fbabfaceaeb587e16f7008f7795cd80d20ec548dc7f94fbb0d4ec2e038ce563f # via -r src/backend/requirements-dev.in -cryptography==46.0.6 \ - --hash=sha256:02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70 \ - --hash=sha256:063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d \ - --hash=sha256:12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a \ - --hash=sha256:12f0fa16cc247b13c43d56d7b35287ff1569b5b1f4c5e87e92cc4fcc00cd10c0 \ - --hash=sha256:22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97 \ - --hash=sha256:26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30 \ - --hash=sha256:27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759 \ - --hash=sha256:2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c \ - --hash=sha256:2ea0f37e9a9cf0df2952893ad145fd9627d326a59daec9b0802480fa3bcd2ead \ - --hash=sha256:2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275 \ - --hash=sha256:341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58 \ - --hash=sha256:380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f \ - --hash=sha256:3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361 \ - --hash=sha256:3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507 \ - --hash=sha256:456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa \ - --hash=sha256:4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b \ - --hash=sha256:50575a76e2951fe7dbd1f56d181f8c5ceeeb075e9ff88e7ad997d2f42af06e7b \ - --hash=sha256:639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8 \ - --hash=sha256:64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8 \ - --hash=sha256:6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72 \ - --hash=sha256:67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175 \ - --hash=sha256:6728c49e3b2c180ef26f8e9f0a883a2c585638db64cf265b49c9ba10652d430e \ - --hash=sha256:6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124 \ - --hash=sha256:69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a \ - --hash=sha256:760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c \ - --hash=sha256:79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f \ - --hash=sha256:7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d \ - --hash=sha256:7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4 \ - --hash=sha256:7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c \ - --hash=sha256:8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290 \ - --hash=sha256:8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca \ - --hash=sha256:8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d \ - --hash=sha256:90e5f0a7b3be5f40c3a0a0eafb32c681d8d2c181fc2a1bdabe9b3f611d9f6b1a \ - --hash=sha256:97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed \ - --hash=sha256:9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a \ - --hash=sha256:9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb \ - --hash=sha256:a3e84d5ec9ba01f8fd03802b2147ba77f0c8f2617b2aff254cedd551844209c8 \ - --hash=sha256:aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707 \ - --hash=sha256:b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410 \ - --hash=sha256:b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736 \ - --hash=sha256:bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2 \ - --hash=sha256:c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4 \ - --hash=sha256:c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013 \ - --hash=sha256:cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19 \ - --hash=sha256:d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b \ - --hash=sha256:d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738 \ - --hash=sha256:d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463 \ - --hash=sha256:ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77 \ - --hash=sha256:ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4 +cryptography==46.0.7 \ + --hash=sha256:04959522f938493042d595a736e7dbdff6eb6cc2339c11465b3ff89343b65f65 \ + --hash=sha256:128c5edfe5e5938b86b03941e94fac9ee793a94452ad1365c9fc3f4f62216832 \ + --hash=sha256:1d25aee46d0c6f1a501adcddb2d2fee4b979381346a78558ed13e50aa8a59067 \ + --hash=sha256:24402210aa54baae71d99441d15bb5a1919c195398a87b563df84468160a65de \ + --hash=sha256:258514877e15963bd43b558917bc9f54cf7cf866c38aa576ebf47a77ddbc43a4 \ + --hash=sha256:35719dc79d4730d30f1c2b6474bd6acda36ae2dfae1e3c16f2051f215df33ce0 \ + --hash=sha256:397655da831414d165029da9bc483bed2fe0e75dde6a1523ec2fe63f3c46046b \ + --hash=sha256:3986ac1dee6def53797289999eabe84798ad7817f3e97779b5061a95b0ee4968 \ + --hash=sha256:420b1e4109cc95f0e5700eed79908cef9268265c773d3a66f7af1eef53d409ef \ + --hash=sha256:42a1e5f98abb6391717978baf9f90dc28a743b7d9be7f0751a6f56a75d14065b \ + --hash=sha256:462ad5cb1c148a22b2e3bcc5ad52504dff325d17daf5df8d88c17dda1f75f2a4 \ + --hash=sha256:506c4ff91eff4f82bdac7633318a526b1d1309fc07ca76a3ad182cb5b686d6d3 \ + --hash=sha256:5ad9ef796328c5e3c4ceed237a183f5d41d21150f972455a9d926593a1dcb308 \ + --hash=sha256:5d1c02a14ceb9148cc7816249f64f623fbfee39e8c03b3650d842ad3f34d637e \ + --hash=sha256:5e51be372b26ef4ba3de3c167cd3d1022934bc838ae9eaad7e644986d2a3d163 \ + --hash=sha256:60627cf07e0d9274338521205899337c5d18249db56865f943cbe753aa96f40f \ + --hash=sha256:65814c60f8cc400c63131584e3e1fad01235edba2614b61fbfbfa954082db0ee \ + --hash=sha256:73510b83623e080a2c35c62c15298096e2a5dc8d51c3b4e1740211839d0dea77 \ + --hash=sha256:7bbc6ccf49d05ac8f7d7b5e2e2c33830d4fe2061def88210a126d130d7f71a85 \ + --hash=sha256:80406c3065e2c55d7f49a9550fe0c49b3f12e5bfff5dedb727e319e1afb9bf99 \ + --hash=sha256:84d4cced91f0f159a7ddacad249cc077e63195c36aac40b4150e7a57e84fffe7 \ + --hash=sha256:8a469028a86f12eb7d2fe97162d0634026d92a21f3ae0ac87ed1c4a447886c83 \ + --hash=sha256:91bbcb08347344f810cbe49065914fe048949648f6bd5c2519f34619142bbe85 \ + --hash=sha256:935ce7e3cfdb53e3536119a542b839bb94ec1ad081013e9ab9b7cfd478b05006 \ + --hash=sha256:9694078c5d44c157ef3162e3bf3946510b857df5a3955458381d1c7cfc143ddb \ + --hash=sha256:a1529d614f44b863a7b480c6d000fe93b59acee9c82ffa027cfadc77521a9f5e \ + --hash=sha256:abad9dac36cbf55de6eb49badd4016806b3165d396f64925bf2999bcb67837ba \ + --hash=sha256:b36a4695e29fe69215d75960b22577197aca3f7a25b9cf9d165dcfe9d80bc325 \ + --hash=sha256:b7b412817be92117ec5ed95f880defe9cf18a832e8cafacf0a22337dc1981b4d \ + --hash=sha256:c5b1ccd1239f48b7151a65bc6dd54bcfcc15e028c8ac126d3fada09db0e07ef1 \ + --hash=sha256:cbd5fb06b62bd0721e1170273d3f4d5a277044c47ca27ee257025146c34cbdd1 \ + --hash=sha256:cdf1a610ef82abb396451862739e3fc93b071c844399e15b90726ef7470eeaf2 \ + --hash=sha256:cdfbe22376065ffcf8be74dc9a909f032df19bc58a699456a21712d6e5eabfd0 \ + --hash=sha256:d02c738dacda7dc2a74d1b2b3177042009d5cab7c7079db74afc19e56ca1b455 \ + --hash=sha256:d151173275e1728cf7839aaa80c34fe550c04ddb27b34f48c232193df8db5842 \ + --hash=sha256:d23c8ca48e44ee015cd0a54aeccdf9f09004eba9fc96f38c911011d9ff1bd457 \ + --hash=sha256:d3b99c535a9de0adced13d159c5a9cf65c325601aa30f4be08afd680643e9c15 \ + --hash=sha256:d5f7520159cd9c2154eb61eb67548ca05c5774d39e9c2c4339fd793fe7d097b2 \ + --hash=sha256:db0f493b9181c7820c8134437eb8b0b4792085d37dbb24da050476ccb664e59c \ + --hash=sha256:e06acf3c99be55aa3b516397fe42f5855597f430add9c17fa46bf2e0fb34c9bb \ + --hash=sha256:e4cfd68c5f3e0bfdad0d38e023239b96a2fe84146481852dffbcca442c245aa5 \ + --hash=sha256:ea42cbe97209df307fdc3b155f1b6fa2577c0defa8f1f7d3be7d31d189108ad4 \ + --hash=sha256:ebd6daf519b9f189f85c479427bbd6e9c9037862cf8fe89ee35503bd209ed902 \ + --hash=sha256:f247c8c1a1fb45e12586afbb436ef21ff1e80670b2861a90353d9b025583d246 \ + --hash=sha256:fbfd0e5f273877695cb93baf14b185f4878128b250cc9f8e617ea0c025dfb022 \ + --hash=sha256:fc9ab8856ae6cf7c9358430e49b368f3108f050031442eaeb6b9d87e4dcf4e4f \ + --hash=sha256:fcd8eac50d9138c1d7fc53a653ba60a2bee81a505f9f8850b6b2888555a45d0e \ + --hash=sha256:fdd1736fed309b4300346f88f74cd120c27c56852c3838cab416e7a166f67298 \ + --hash=sha256:ffca7aa1d00cf7d6469b988c581598f2259e46215e0140af408966a24cf086ce # via # -c src/backend/requirements.txt # pdfminer-six @@ -412,9 +412,9 @@ distlib==0.4.0 \ --hash=sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16 \ --hash=sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d # via virtualenv -django==5.2.12 \ - --hash=sha256:4853482f395c3a151937f6991272540fcbf531464f254a347bf7c89f53c8cff7 \ - --hash=sha256:6b809af7165c73eff5ce1c87fdae75d4da6520d6667f86401ecf55b681eb1eeb +django==5.2.13 \ + --hash=sha256:5788fce61da23788a8ce6f02583765ab060d396720924789f97fa42119d37f7a \ + --hash=sha256:a31589db5188d074c63f0945c3888fad104627dfcc236fb2b97f71f89da33bc4 # via # -c src/backend/requirements.txt # django-silk @@ -431,13 +431,13 @@ django-silk==5.5.0 \ django-slowtests==1.1.1 \ --hash=sha256:3c6936d420c9df444ac03625b41d97de043c662bbde61fbcd33e4cd407d0c247 # via -r src/backend/requirements-dev.in -django-stubs==6.0.1 \ - --hash=sha256:d885044bd0876610f3eb969d6b5ed22f386002a879fdcb369cd8efa0502dbbce \ - --hash=sha256:e1ca63634221b57a55e16562b9b6d1849aeee2cabfd0fc026084dbe8aa893366 +django-stubs==6.0.2 \ + --hash=sha256:56d43b5e3741563af0063e5b6283f908c625b0439aa06314268673699d1bdccd \ + --hash=sha256:c3bc84d80421758f3b2ad9e1358e001d719388a8eb106e67c873e606216108d4 # via -r src/backend/requirements-dev.in -django-stubs-ext==6.0.1 \ - --hash=sha256:17415759b9a3f4b4da7998ac3b08c7dc5137f9a019490b918aece1a8a4c2ade4 \ - --hash=sha256:633b280f89c0cbb7e3ce2f2f842e0acc43d8091378e75f84921d6be675d052dc +django-stubs-ext==6.0.2 \ + --hash=sha256:70b7b7ae837e7a6036e2facb64435550bf7cf8143c1a6e802864d4824ce6058c \ + --hash=sha256:b35bdec1995bf49765cc39fa89aa7c23f120a23d0cb0152ab7fb4e48ff7d667b # via django-stubs django-test-migrations==1.5.0 \ --hash=sha256:1cbff04b1e82c5564a6f635284907b381cc11a2ff883adff46776d9126824f07 \ @@ -507,9 +507,9 @@ pip-tools==7.5.3 \ --hash=sha256:3aac0c473240ae90db7213c033401f345b05197293ccbdd2704e52e7a783785e \ --hash=sha256:8fa364779ebc010cbfe17cb9de404457ac733e100840423f28f6955de7742d41 # via -r src/backend/requirements-dev.in -platformdirs==4.9.4 \ - --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ - --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 +platformdirs==4.9.6 \ + --hash=sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a \ + --hash=sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917 # via # -c src/backend/requirements.txt # python-discovery @@ -540,9 +540,9 @@ pyproject-hooks==1.2.0 \ # via # build # pip-tools -pytest==9.0.2 \ - --hash=sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b \ - --hash=sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11 +pytest==9.0.3 \ + --hash=sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9 \ + --hash=sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c # via # pytest-codspeed # pytest-django @@ -568,9 +568,9 @@ pytest-django==4.12.0 \ --hash=sha256:3ff300c49f8350ba2953b90297d23bf5f589db69545f56f1ec5f8cff5da83e85 \ --hash=sha256:df94ec819a83c8979c8f6de13d9cdfbe76e8c21d39473cfe2b40c9fc9be3c758 # via -r src/backend/requirements-dev.in -python-discovery==1.2.0 \ - --hash=sha256:1e108f1bbe2ed0ef089823d28805d5ad32be8e734b86a5f212bf89b71c266e4a \ - --hash=sha256:7d33e350704818b09e3da2bd419d37e21e7c30db6e0977bb438916e06b41b5b1 +python-discovery==1.2.2 \ + --hash=sha256:876e9c57139eb757cb5878cbdd9ae5379e5d96266c99ef731119e04fffe533bb \ + --hash=sha256:e1ae95d9af875e78f15e19aed0c6137ab1bb49c200f21f5061786490c9585c7a # via virtualenv pyyaml==6.0.3 \ --hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \ @@ -649,9 +649,9 @@ pyyaml==6.0.3 \ # via # -c src/backend/requirements.txt # pre-commit -requests==2.33.0 \ - --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ - --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 +requests==2.33.1 \ + --hash=sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517 \ + --hash=sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a # via # -c src/backend/requirements.txt # requests-mock @@ -746,13 +746,13 @@ ty==0.0.1a21 \ --hash=sha256:e941e9a9d1e54b03eeaf9c3197c26a19cf76009fd5e41e16e5657c1c827bd6d3 \ --hash=sha256:ecf41706b803827b0de8717f32a434dad1e67be9f4b8caf403e12013179ea06a # via -r src/backend/requirements-dev.in -types-psycopg2==2.9.21.20260223 \ - --hash=sha256:78ed70de2e56bc6b5c26c8c1da8e9af54e49fdc3c94d1504609f3519e2b84f02 \ - --hash=sha256:c6228ade72d813b0624f4c03feeb89471950ac27cd0506b5debed6f053086bc8 +types-psycopg2==2.9.21.20260408 \ + --hash=sha256:49b086bfc9e0ce901c6537403ead1c19c75275571040b037af0248a8e48c322f \ + --hash=sha256:bb65cd12f53b6633077fd782607a33065e1f3bf585219c9f786b61ad2b72211c # via django-types -types-pyyaml==6.0.12.20250915 \ - --hash=sha256:0f8b54a528c303f0e6f7165687dd33fafa81c807fcac23f632b63aa624ced1d3 \ - --hash=sha256:e7d4d9e064e89a3b3cae120b4990cd370874d2bf12fa5f46c97018dd5d3c9ab6 +types-pyyaml==6.0.12.20260408 \ + --hash=sha256:92a73f2b8d7f39ef392a38131f76b970f8c66e4c42b3125ae872b7c93b556307 \ + --hash=sha256:fbc42037d12159d9c801ebfcc79ebd28335a7c13b08a4cfbc6916df78fee9384 # via django-stubs typing-extensions==4.15.0 \ --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ @@ -768,9 +768,9 @@ urllib3==2.6.3 \ # via # -c src/backend/requirements.txt # requests -virtualenv==21.2.0 \ - --hash=sha256:1720dc3a62ef5b443092e3f499228599045d7fea4c79199770499df8becf9098 \ - --hash=sha256:1bd755b504931164a5a496d217c014d098426cddc79363ad66ac78125f9d908f +virtualenv==21.2.1 \ + --hash=sha256:b66ffe81301766c0d5e2208fc3576652c59d44e7b731fc5f5ed701c9b537fa78 \ + --hash=sha256:bd16b49c53562b28cf1a3ad2f36edb805ad71301dee70ddc449e5c88a9f919a2 # via pre-commit wheel==0.46.3 \ --hash=sha256:4b399d56c9d9338230118d705d9737a2a468ccca63d5e813e2a4fc7815d8bc4d \ diff --git a/src/backend/requirements.txt b/src/backend/requirements.txt index b1a03b63a2..e0317709cf 100644 --- a/src/backend/requirements.txt +++ b/src/backend/requirements.txt @@ -91,19 +91,19 @@ bleach==4.1.0 \ --hash=sha256:0900d8b37eba61a802ee40ac0061f8c2b5dee29c1927dd1d233e075ebf5a71da \ --hash=sha256:4d2651ab93271d1129ac9cbc679f524565cc8a1b791909c4a51eac4446a15994 # via django-markdownify -blessed==1.34.0 \ - --hash=sha256:3d17468c3d47e11ed8d6ca3da1270b8aba8ac8bd0a55a1f8189e4d04f223a1f0 \ - --hash=sha256:eb403f9ce2efab633bd1e7a05fbb35b979a7b9f213ddc41478dd55dd6999e8bf +blessed==1.38.0 \ + --hash=sha256:89ce6ec6567f7aced0716b73577b7a1702eb23c667838bb46d7d9bd48c36d1b3 \ + --hash=sha256:905884ae650e41284fa4fd7d0c3eed5e5b4a42be8c2bfb24c90d79fbf26a1490 # via -r src/backend/requirements.in -boto3==1.42.76 \ - --hash=sha256:63c6779c814847016b89ae1b72ed968f8a63d80e589ba337511aa6fc1b59585e \ - --hash=sha256:aa2b1973eee8973a9475d24bb579b1dee7176595338d4e4f7880b5c6189b8814 +boto3==1.42.87 \ + --hash=sha256:15cc1404b3ccbcfe17bd5834d467b1b28d53d9aca44e3798dc44876ac57362e6 \ + --hash=sha256:b5b86a826f8f12c7d38679f35bd0135807a6867a21eb8be6dea7c27aeb14ec14 # via # django-anymail # django-storages -botocore==1.42.76 \ - --hash=sha256:151e714ae3c32f68ea0b4dc60751401e03f84a87c6cf864ea0ee64aa10eb4607 \ - --hash=sha256:c553fa0ae29e36a5c407f74da78b78404b81b74b15fb62bf640a3cd9385f0874 +botocore==1.42.87 \ + --hash=sha256:1c6cc9555c1feec50b290a42de70ba6f04826c009562c2c12bb9990d0258482d \ + --hash=sha256:32832df27c039cc1a518289afe0f6006296d3df26603b5f66e911457e67f0146 # via # boto3 # s3transfer @@ -304,187 +304,187 @@ cffi==2.0.0 \ # cryptography # pynacl # weasyprint -charset-normalizer==3.4.6 \ - --hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \ - --hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \ - --hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \ - --hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \ - --hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \ - --hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \ - --hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \ - --hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \ - --hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \ - --hash=sha256:1cf0a70018692f85172348fe06d3a4b63f94ecb055e13a00c644d368eb82e5b8 \ - --hash=sha256:1ed80ff870ca6de33f4d953fda4d55654b9a2b340ff39ab32fa3adbcd718f264 \ - --hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \ - --hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \ - --hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \ - --hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \ - --hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \ - --hash=sha256:2bd9d128ef93637a5d7a6af25363cf5dec3fa21cf80e68055aad627f280e8afa \ - --hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \ - --hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \ - --hash=sha256:2f7fdd9b6e6c529d6a2501a2d36b240109e78a8ceaef5687cfcfa2bbe671d297 \ - --hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \ - --hash=sha256:31215157227939b4fb3d740cd23fe27be0439afef67b785a1eb78a3ae69cba9e \ - --hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \ - --hash=sha256:3516bbb8d42169de9e61b8520cbeeeb716f12f4ecfe3fd30a9919aa16c806ca8 \ - --hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \ - --hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \ - --hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \ - --hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \ - --hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \ - --hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \ - --hash=sha256:461598cd852bfa5a61b09cae2b1c02e2efcd166ee5516e243d540ac24bfa68a7 \ - --hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \ - --hash=sha256:48696db7f18afb80a068821504296eb0787d9ce239b91ca15059d1d3eaacf13b \ - --hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \ - --hash=sha256:4d1d02209e06550bdaef34af58e041ad71b88e624f5d825519da3a3308e22687 \ - --hash=sha256:4f41da960b196ea355357285ad1316a00099f22d0929fe168343b99b254729c9 \ - --hash=sha256:517ad0e93394ac532745129ceabdf2696b609ec9f87863d337140317ebce1c14 \ - --hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \ - --hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \ - --hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \ - --hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \ - --hash=sha256:54fae94be3d75f3e573c9a1b5402dc593de19377013c9a0e4285e3d402dd3a2a \ - --hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \ - --hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \ - --hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \ - --hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \ - --hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \ - --hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \ - --hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \ - --hash=sha256:659a1e1b500fac8f2779dd9e1570464e012f43e580371470b45277a27baa7532 \ - --hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \ - --hash=sha256:69dd852c2f0ad631b8b60cfbe25a28c0058a894de5abb566619c205ce0550eae \ - --hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \ - --hash=sha256:71be7e0e01753a89cf024abf7ecb6bca2c81738ead80d43004d9b5e3f1244e64 \ - --hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \ - --hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \ - --hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \ - --hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \ - --hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \ - --hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \ - --hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \ - --hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \ - --hash=sha256:802168e03fba8bbc5ce0d866d589e4b1ca751d06edee69f7f3a19c5a9fe6b597 \ - --hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \ - --hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \ - --hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \ - --hash=sha256:8761ac29b6c81574724322a554605608a9960769ea83d2c73e396f3df896ad54 \ - --hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \ - --hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \ - --hash=sha256:8bc5f0687d796c05b1e28ab0d38a50e6309906ee09375dd3aff6a9c09dd6e8f4 \ - --hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \ - --hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \ - --hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \ - --hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \ - --hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \ - --hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \ - --hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \ - --hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \ - --hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \ - --hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \ - --hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \ - --hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \ - --hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \ - --hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \ - --hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \ - --hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \ - --hash=sha256:ab30e5e3e706e3063bc6de96b118688cb10396b70bb9864a430f67df98c61ecc \ - --hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \ - --hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \ - --hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \ - --hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \ - --hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \ - --hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \ - --hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \ - --hash=sha256:bf625105bb9eef28a56a943fec8c8a98aeb80e7d7db99bd3c388137e6eb2d237 \ - --hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \ - --hash=sha256:c45a03a4c69820a399f1dda9e1d8fbf3562eda46e7720458180302021b08f778 \ - --hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \ - --hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \ - --hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \ - --hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \ - --hash=sha256:d08ec48f0a1c48d75d0356cea971921848fb620fdeba805b28f937e90691209f \ - --hash=sha256:d1a2ee9c1499fc8f86f4521f27a973c914b211ffa87322f4ee33bb35392da2c5 \ - --hash=sha256:d5f5d1e9def3405f60e3ca8232d56f35c98fb7bf581efcc60051ebf53cb8b611 \ - --hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \ - --hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \ - --hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \ - --hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \ - --hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \ - --hash=sha256:df01808ee470038c3f8dc4f48620df7225c49c2d6639e38f96e6d6ac6e6f7b0e \ - --hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \ - --hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \ - --hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \ - --hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \ - --hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \ - --hash=sha256:e8aeb10fcbe92767f0fa69ad5a72deca50d0dca07fbde97848997d778a50c9fe \ - --hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \ - --hash=sha256:ecbbd45615a6885fe3240eb9db73b9e62518b611850fdf8ab08bd56de7ad2b17 \ - --hash=sha256:ee4ec14bc1680d6b0afab9aea2ef27e26d2024f18b24a2d7155a52b60da7e833 \ - --hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \ - --hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \ - --hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \ - --hash=sha256:f50498891691e0864dc3da965f340fada0771f6142a378083dc4608f4ea513e2 \ - --hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \ - --hash=sha256:f61aa92e4aad0be58eb6eb4e0c21acf32cf8065f4b2cae5665da756c4ceef982 \ - --hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \ - --hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \ - --hash=sha256:f98059e4fcd3e3e4e2d632b7cf81c2faae96c43c60b569e9c621468082f1d104 \ - --hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659 +charset-normalizer==3.4.7 \ + --hash=sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc \ + --hash=sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c \ + --hash=sha256:07d9e39b01743c3717745f4c530a6349eadbfa043c7577eef86c502c15df2c67 \ + --hash=sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4 \ + --hash=sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0 \ + --hash=sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c \ + --hash=sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5 \ + --hash=sha256:12a6fff75f6bc66711b73a2f0addfc4c8c15a20e805146a02d147a318962c444 \ + --hash=sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153 \ + --hash=sha256:14265bfe1f09498b9d8ec91e9ec9fa52775edf90fcbde092b25f4a33d444fea9 \ + --hash=sha256:16d971e29578a5e97d7117866d15889a4a07befe0e87e703ed63cd90cb348c01 \ + --hash=sha256:177a0ba5f0211d488e295aaf82707237e331c24788d8d76c96c5a41594723217 \ + --hash=sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b \ + --hash=sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c \ + --hash=sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a \ + --hash=sha256:1dc8b0ea451d6e69735094606991f32867807881400f808a106ee1d963c46a83 \ + --hash=sha256:1efde3cae86c8c273f1eb3b287be7d8499420cf2fe7585c41d370d3e790054a5 \ + --hash=sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7 \ + --hash=sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb \ + --hash=sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c \ + --hash=sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1 \ + --hash=sha256:2cd4a60d0e2fb04537162c62bbbb4182f53541fe0ede35cdf270a1c1e723cc42 \ + --hash=sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab \ + --hash=sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df \ + --hash=sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e \ + --hash=sha256:320ade88cfb846b8cd6b4ddf5ee9e80ee0c1f52401f2456b84ae1ae6a1a5f207 \ + --hash=sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18 \ + --hash=sha256:36836d6ff945a00b88ba1e4572d721e60b5b8c98c155d465f56ad19d68f23734 \ + --hash=sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38 \ + --hash=sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110 \ + --hash=sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18 \ + --hash=sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44 \ + --hash=sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d \ + --hash=sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48 \ + --hash=sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e \ + --hash=sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5 \ + --hash=sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d \ + --hash=sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53 \ + --hash=sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790 \ + --hash=sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c \ + --hash=sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b \ + --hash=sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116 \ + --hash=sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d \ + --hash=sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10 \ + --hash=sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6 \ + --hash=sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2 \ + --hash=sha256:6370e8686f662e6a3941ee48ed4742317cafbe5707e36406e9df792cdb535776 \ + --hash=sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a \ + --hash=sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265 \ + --hash=sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008 \ + --hash=sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943 \ + --hash=sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374 \ + --hash=sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246 \ + --hash=sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e \ + --hash=sha256:6e0d51f618228538a3e8f46bd246f87a6cd030565e015803691603f55e12afb5 \ + --hash=sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616 \ + --hash=sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15 \ + --hash=sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41 \ + --hash=sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960 \ + --hash=sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752 \ + --hash=sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e \ + --hash=sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72 \ + --hash=sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7 \ + --hash=sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8 \ + --hash=sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b \ + --hash=sha256:813c0e0132266c08eb87469a642cb30aaff57c5f426255419572aaeceeaa7bf4 \ + --hash=sha256:82b271f5137d07749f7bf32f70b17ab6eaabedd297e75dce75081a24f76eb545 \ + --hash=sha256:84c018e49c3bf790f9c2771c45e9313a08c2c2a6342b162cd650258b57817706 \ + --hash=sha256:8751d2787c9131302398b11e6c8068053dcb55d5a8964e114b6e196cf16cb366 \ + --hash=sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb \ + --hash=sha256:87fad7d9ba98c86bcb41b2dc8dbb326619be2562af1f8ff50776a39e55721c5a \ + --hash=sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e \ + --hash=sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00 \ + --hash=sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f \ + --hash=sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a \ + --hash=sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1 \ + --hash=sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66 \ + --hash=sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356 \ + --hash=sha256:a6c5863edfbe888d9eff9c8b8087354e27618d9da76425c119293f11712a6319 \ + --hash=sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4 \ + --hash=sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad \ + --hash=sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d \ + --hash=sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5 \ + --hash=sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7 \ + --hash=sha256:aef65cd602a6d0e0ff6f9930fcb1c8fec60dd2cfcb6facaf4bdb0e5873042db0 \ + --hash=sha256:af21eb4409a119e365397b2adbaca4c9ccab56543a65d5dbd9f920d6ac29f686 \ + --hash=sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34 \ + --hash=sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49 \ + --hash=sha256:bb8cc7534f51d9a017b93e3e85b260924f909601c3df002bcdb58ddb4dc41a5c \ + --hash=sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1 \ + --hash=sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e \ + --hash=sha256:bd9b23791fe793e4968dba0c447e12f78e425c59fc0e3b97f6450f4781f3ee60 \ + --hash=sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0 \ + --hash=sha256:c0f081d69a6e58272819b70288d3221a6ee64b98df852631c80f293514d3b274 \ + --hash=sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d \ + --hash=sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0 \ + --hash=sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae \ + --hash=sha256:c593052c465475e64bbfe5dbd81680f64a67fdc752c56d7a0ae205dc8aeefe0f \ + --hash=sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d \ + --hash=sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe \ + --hash=sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3 \ + --hash=sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393 \ + --hash=sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1 \ + --hash=sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af \ + --hash=sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44 \ + --hash=sha256:d61f00a0869d77422d9b2aba989e2d24afa6ffd552af442e0e58de4f35ea6d00 \ + --hash=sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c \ + --hash=sha256:dca4bbc466a95ba9c0234ef56d7dd9509f63da22274589ebd4ed7f1f4d4c54e3 \ + --hash=sha256:dd915403e231e6b1809fe9b6d9fc55cf8fb5e02765ac625d9cd623342a7905d7 \ + --hash=sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd \ + --hash=sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e \ + --hash=sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b \ + --hash=sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8 \ + --hash=sha256:e5f4d355f0a2b1a31bc3edec6795b46324349c9cb25eed068049e4f472fb4259 \ + --hash=sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859 \ + --hash=sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46 \ + --hash=sha256:e80c8378d8f3d83cd3164da1ad2df9e37a666cdde7b1cb2298ed0b558064be30 \ + --hash=sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b \ + --hash=sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46 \ + --hash=sha256:ed065083d0898c9d5b4bbec7b026fd755ff7454e6e8b73a67f8c744b13986e24 \ + --hash=sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a \ + --hash=sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24 \ + --hash=sha256:f22dec1690b584cea26fade98b2435c132c1b5f68e39f5a0b7627cd7ae31f1dc \ + --hash=sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215 \ + --hash=sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063 \ + --hash=sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832 \ + --hash=sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6 \ + --hash=sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79 \ + --hash=sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464 # via requests -cryptography==46.0.6 \ - --hash=sha256:02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70 \ - --hash=sha256:063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d \ - --hash=sha256:12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a \ - --hash=sha256:12f0fa16cc247b13c43d56d7b35287ff1569b5b1f4c5e87e92cc4fcc00cd10c0 \ - --hash=sha256:22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97 \ - --hash=sha256:26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30 \ - --hash=sha256:27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759 \ - --hash=sha256:2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c \ - --hash=sha256:2ea0f37e9a9cf0df2952893ad145fd9627d326a59daec9b0802480fa3bcd2ead \ - --hash=sha256:2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275 \ - --hash=sha256:341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58 \ - --hash=sha256:380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f \ - --hash=sha256:3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361 \ - --hash=sha256:3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507 \ - --hash=sha256:456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa \ - --hash=sha256:4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b \ - --hash=sha256:50575a76e2951fe7dbd1f56d181f8c5ceeeb075e9ff88e7ad997d2f42af06e7b \ - --hash=sha256:639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8 \ - --hash=sha256:64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8 \ - --hash=sha256:6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72 \ - --hash=sha256:67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175 \ - --hash=sha256:6728c49e3b2c180ef26f8e9f0a883a2c585638db64cf265b49c9ba10652d430e \ - --hash=sha256:6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124 \ - --hash=sha256:69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a \ - --hash=sha256:760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c \ - --hash=sha256:79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f \ - --hash=sha256:7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d \ - --hash=sha256:7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4 \ - --hash=sha256:7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c \ - --hash=sha256:8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290 \ - --hash=sha256:8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca \ - --hash=sha256:8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d \ - --hash=sha256:90e5f0a7b3be5f40c3a0a0eafb32c681d8d2c181fc2a1bdabe9b3f611d9f6b1a \ - --hash=sha256:97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed \ - --hash=sha256:9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a \ - --hash=sha256:9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb \ - --hash=sha256:a3e84d5ec9ba01f8fd03802b2147ba77f0c8f2617b2aff254cedd551844209c8 \ - --hash=sha256:aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707 \ - --hash=sha256:b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410 \ - --hash=sha256:b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736 \ - --hash=sha256:bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2 \ - --hash=sha256:c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4 \ - --hash=sha256:c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013 \ - --hash=sha256:cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19 \ - --hash=sha256:d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b \ - --hash=sha256:d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738 \ - --hash=sha256:d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463 \ - --hash=sha256:ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77 \ - --hash=sha256:ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4 +cryptography==46.0.7 \ + --hash=sha256:04959522f938493042d595a736e7dbdff6eb6cc2339c11465b3ff89343b65f65 \ + --hash=sha256:128c5edfe5e5938b86b03941e94fac9ee793a94452ad1365c9fc3f4f62216832 \ + --hash=sha256:1d25aee46d0c6f1a501adcddb2d2fee4b979381346a78558ed13e50aa8a59067 \ + --hash=sha256:24402210aa54baae71d99441d15bb5a1919c195398a87b563df84468160a65de \ + --hash=sha256:258514877e15963bd43b558917bc9f54cf7cf866c38aa576ebf47a77ddbc43a4 \ + --hash=sha256:35719dc79d4730d30f1c2b6474bd6acda36ae2dfae1e3c16f2051f215df33ce0 \ + --hash=sha256:397655da831414d165029da9bc483bed2fe0e75dde6a1523ec2fe63f3c46046b \ + --hash=sha256:3986ac1dee6def53797289999eabe84798ad7817f3e97779b5061a95b0ee4968 \ + --hash=sha256:420b1e4109cc95f0e5700eed79908cef9268265c773d3a66f7af1eef53d409ef \ + --hash=sha256:42a1e5f98abb6391717978baf9f90dc28a743b7d9be7f0751a6f56a75d14065b \ + --hash=sha256:462ad5cb1c148a22b2e3bcc5ad52504dff325d17daf5df8d88c17dda1f75f2a4 \ + --hash=sha256:506c4ff91eff4f82bdac7633318a526b1d1309fc07ca76a3ad182cb5b686d6d3 \ + --hash=sha256:5ad9ef796328c5e3c4ceed237a183f5d41d21150f972455a9d926593a1dcb308 \ + --hash=sha256:5d1c02a14ceb9148cc7816249f64f623fbfee39e8c03b3650d842ad3f34d637e \ + --hash=sha256:5e51be372b26ef4ba3de3c167cd3d1022934bc838ae9eaad7e644986d2a3d163 \ + --hash=sha256:60627cf07e0d9274338521205899337c5d18249db56865f943cbe753aa96f40f \ + --hash=sha256:65814c60f8cc400c63131584e3e1fad01235edba2614b61fbfbfa954082db0ee \ + --hash=sha256:73510b83623e080a2c35c62c15298096e2a5dc8d51c3b4e1740211839d0dea77 \ + --hash=sha256:7bbc6ccf49d05ac8f7d7b5e2e2c33830d4fe2061def88210a126d130d7f71a85 \ + --hash=sha256:80406c3065e2c55d7f49a9550fe0c49b3f12e5bfff5dedb727e319e1afb9bf99 \ + --hash=sha256:84d4cced91f0f159a7ddacad249cc077e63195c36aac40b4150e7a57e84fffe7 \ + --hash=sha256:8a469028a86f12eb7d2fe97162d0634026d92a21f3ae0ac87ed1c4a447886c83 \ + --hash=sha256:91bbcb08347344f810cbe49065914fe048949648f6bd5c2519f34619142bbe85 \ + --hash=sha256:935ce7e3cfdb53e3536119a542b839bb94ec1ad081013e9ab9b7cfd478b05006 \ + --hash=sha256:9694078c5d44c157ef3162e3bf3946510b857df5a3955458381d1c7cfc143ddb \ + --hash=sha256:a1529d614f44b863a7b480c6d000fe93b59acee9c82ffa027cfadc77521a9f5e \ + --hash=sha256:abad9dac36cbf55de6eb49badd4016806b3165d396f64925bf2999bcb67837ba \ + --hash=sha256:b36a4695e29fe69215d75960b22577197aca3f7a25b9cf9d165dcfe9d80bc325 \ + --hash=sha256:b7b412817be92117ec5ed95f880defe9cf18a832e8cafacf0a22337dc1981b4d \ + --hash=sha256:c5b1ccd1239f48b7151a65bc6dd54bcfcc15e028c8ac126d3fada09db0e07ef1 \ + --hash=sha256:cbd5fb06b62bd0721e1170273d3f4d5a277044c47ca27ee257025146c34cbdd1 \ + --hash=sha256:cdf1a610ef82abb396451862739e3fc93b071c844399e15b90726ef7470eeaf2 \ + --hash=sha256:cdfbe22376065ffcf8be74dc9a909f032df19bc58a699456a21712d6e5eabfd0 \ + --hash=sha256:d02c738dacda7dc2a74d1b2b3177042009d5cab7c7079db74afc19e56ca1b455 \ + --hash=sha256:d151173275e1728cf7839aaa80c34fe550c04ddb27b34f48c232193df8db5842 \ + --hash=sha256:d23c8ca48e44ee015cd0a54aeccdf9f09004eba9fc96f38c911011d9ff1bd457 \ + --hash=sha256:d3b99c535a9de0adced13d159c5a9cf65c325601aa30f4be08afd680643e9c15 \ + --hash=sha256:d5f7520159cd9c2154eb61eb67548ca05c5774d39e9c2c4339fd793fe7d097b2 \ + --hash=sha256:db0f493b9181c7820c8134437eb8b0b4792085d37dbb24da050476ccb664e59c \ + --hash=sha256:e06acf3c99be55aa3b516397fe42f5855597f430add9c17fa46bf2e0fb34c9bb \ + --hash=sha256:e4cfd68c5f3e0bfdad0d38e023239b96a2fe84146481852dffbcca442c245aa5 \ + --hash=sha256:ea42cbe97209df307fdc3b155f1b6fa2577c0defa8f1f7d3be7d31d189108ad4 \ + --hash=sha256:ebd6daf519b9f189f85c479427bbd6e9c9037862cf8fe89ee35503bd209ed902 \ + --hash=sha256:f247c8c1a1fb45e12586afbb436ef21ff1e80670b2861a90353d9b025583d246 \ + --hash=sha256:fbfd0e5f273877695cb93baf14b185f4878128b250cc9f8e617ea0c025dfb022 \ + --hash=sha256:fc9ab8856ae6cf7c9358430e49b368f3108f050031442eaeb6b9d87e4dcf4e4f \ + --hash=sha256:fcd8eac50d9138c1d7fc53a653ba60a2bee81a505f9f8850b6b2888555a45d0e \ + --hash=sha256:fdd1736fed309b4300346f88f74cd120c27c56852c3838cab416e7a166f67298 \ + --hash=sha256:ffca7aa1d00cf7d6469b988c581598f2259e46215e0140af408966a24cf086ce # via # -r src/backend/requirements.in # django-anymail @@ -501,9 +501,9 @@ defusedxml==0.7.1 \ --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 # via python3-openid -django==5.2.12 \ - --hash=sha256:4853482f395c3a151937f6991272540fcbf531464f254a347bf7c89f53c8cff7 \ - --hash=sha256:6b809af7165c73eff5ce1c87fdae75d4da6520d6667f86401ecf55b681eb1eeb +django==5.2.13 \ + --hash=sha256:5788fce61da23788a8ce6f02583765ab060d396720924789f97fa42119d37f7a \ + --hash=sha256:a31589db5188d074c63f0945c3888fad104627dfcc236fb2b97f71f89da33bc4 # via # -r src/backend/requirements.in # django-allauth @@ -550,9 +550,9 @@ django-cors-headers==4.9.0 \ --hash=sha256:15c7f20727f90044dcee2216a9fd7303741a864865f0c3657e28b7056f61b449 \ --hash=sha256:fe5d7cb59fdc2c8c646ce84b727ac2bca8912a247e6e68e1fb507372178e59e8 # via -r src/backend/requirements.in -django-dbbackup==5.2.0 \ - --hash=sha256:540948869e44778b5b33333cbab0cfe44279defd47df635d309ede8666894370 \ - --hash=sha256:72b11dd31758abcf8f2d405fd2efbc49c9624bc17196f8c68542d3dc8d8d53c3 +django-dbbackup==5.3.0 \ + --hash=sha256:2c880dba7650539e8a724174fedb5213062c4fcda3aa09e1c5f3f573192106cb \ + --hash=sha256:ff80b5facd524e3f6479235aeb330b094a1c982f8b0b9503c24ba0dc613162ed # via -r src/backend/requirements.in django-error-report-2==0.4.2 \ --hash=sha256:1dd99c497af09b7ea99f5fbaf910501838150a9d5390796ea00e187bc62f6c1b \ @@ -783,80 +783,80 @@ fonttools[woff]==4.62.1 \ --hash=sha256:ef46db46c9447103b8f3ff91e8ba009d5fe181b1920a83757a5762551e32bb68 \ --hash=sha256:fa1d16210b6b10a826d71bed68dd9ec24a9e218d5a5e2797f37c573e7ec215ca # via weasyprint -googleapis-common-protos==1.73.0 \ - --hash=sha256:778d07cd4fbeff84c6f7c72102f0daf98fa2bfd3fa8bea426edc545588da0b5a \ - --hash=sha256:dfdaaa2e860f242046be561e6d6cb5c5f1541ae02cfbcb034371aadb2942b4e8 +googleapis-common-protos==1.74.0 \ + --hash=sha256:57971e4eeeba6aad1163c1f0fc88543f965bb49129b8bb55b2b7b26ecab084f1 \ + --hash=sha256:702216f78610bb510e3f12ac3cafd281b7ac45cc5d86e90ad87e4d301a3426b5 # via # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http -grpcio==1.78.0 \ - --hash=sha256:082653eecbdf290e6e3e2c276ab2c54b9e7c299e07f4221872380312d8cf395e \ - --hash=sha256:10a9a644b5dd5aec3b82b5b0b90d41c0fa94c85ef42cb42cf78a23291ddb5e7d \ - --hash=sha256:12a771591ae40bc65ba67048fa52ef4f0e6db8279e595fd349f9dfddeef571f9 \ - --hash=sha256:185dea0d5260cbb2d224c507bf2a5444d5abbb1fa3594c1ed7e4c709d5eb8383 \ - --hash=sha256:1afa62af6e23f88629f2b29ec9e52ec7c65a7176c1e0a83292b93c76ca882558 \ - --hash=sha256:2045397e63a7a0ee7957c25f7dbb36ddc110e0cfb418403d110c0a7a68a844e9 \ - --hash=sha256:207db540302c884b8848036b80db352a832b99dfdf41db1eb554c2c2c7800f65 \ - --hash=sha256:271c73e6e5676afe4fc52907686670c7cea22ab2310b76a59b678403ed40d670 \ - --hash=sha256:2777b783f6c13b92bd7b716667452c329eefd646bfb3f2e9dabea2e05dbd34f6 \ - --hash=sha256:2bf5e2e163b356978b23652c4818ce4759d40f4712ee9ec5a83c4be6f8c23a3a \ - --hash=sha256:35eb275bf1751d2ffbd8f57cdbc46058e857cf3971041521b78b7db94bdaf127 \ - --hash=sha256:391e93548644e6b2726f1bb84ed60048d4bcc424ce5e4af0843d28ca0b754fec \ - --hash=sha256:3c586ac70e855c721bda8f548d38c3ca66ac791dc49b66a8281a1f99db85e452 \ - --hash=sha256:3f8904a8165ab21e07e58bf3e30a73f4dffc7a1e0dbc32d51c61b5360d26f43e \ - --hash=sha256:459ab414b35f4496138d0ecd735fed26f1318af5e52cb1efbc82a09f0d5aa911 \ - --hash=sha256:4c5533d03a6cbd7f56acfc9cfb44ea64f63d29091e40e44010d34178d392d7eb \ - --hash=sha256:51b13f9aed9d59ee389ad666b8c2214cc87b5de258fa712f9ab05f922e3896c6 \ - --hash=sha256:5361a0630a7fdb58a6a97638ab70e1dae2893c4d08d7aba64ded28bb9e7a29df \ - --hash=sha256:5397fff416b79e4b284959642a4e95ac4b0f1ece82c9993658e0e477d40551ec \ - --hash=sha256:57bab6deef2f4f1ca76cc04565df38dc5713ae6c17de690721bdf30cb1e0545c \ - --hash=sha256:6092beabe1966a3229f599d7088b38dfc8ffa1608b5b5cdda31e591e6500f856 \ - --hash=sha256:684083fd383e9dc04c794adb838d4faea08b291ce81f64ecd08e4577c7398adf \ - --hash=sha256:735e38e176a88ce41840c21bb49098ab66177c64c82426e24e0082500cc68af5 \ - --hash=sha256:7382b95189546f375c174f53a5fa873cef91c4b8005faa05cc5b3beea9c4f1c5 \ - --hash=sha256:748b6138585379c737adc08aeffd21222abbda1a86a0dca2a39682feb9196c20 \ - --hash=sha256:74be1268d1439eaaf552c698cdb11cd594f0c49295ae6bb72c34ee31abbe611b \ - --hash=sha256:7cc47943d524ee0096f973e1081cb8f4f17a4615f2116882a5f1416e4cfe92b5 \ - --hash=sha256:859b13906ce098c0b493af92142ad051bf64c7870fa58a123911c88606714996 \ - --hash=sha256:85f93781028ec63f383f6bc90db785a016319c561cc11151fbb7b34e0d012303 \ - --hash=sha256:86ce2371bfd7f212cf60d8517e5e854475c2c43ce14aa910e136ace72c6db6c1 \ - --hash=sha256:86f85dd7c947baa707078a236288a289044836d4b640962018ceb9cd1f899af5 \ - --hash=sha256:8dfffba826efcf366b1e3ccc37e67afe676f290e13a3b48d31a46739f80a8724 \ - --hash=sha256:8f2ac84905d12918e4e55a16da17939eb63e433dc11b677267c35568aa63fc84 \ - --hash=sha256:94309f498bcc07e5a7d16089ab984d42ad96af1d94b5a4eb966a266d9fcabf68 \ - --hash=sha256:94f95cf5d532d0e717eed4fc1810e8e6eded04621342ec54c89a7c2f14b581bf \ - --hash=sha256:9566fe4ababbb2610c39190791e5b829869351d14369603702e890ef3ad2d06e \ - --hash=sha256:9dca934f24c732750389ce49d638069c3892ad065df86cb465b3fa3012b70c9e \ - --hash=sha256:a9f136fbafe7ccf4ac7e8e0c28b31066e810be52d6e344ef954a3a70234e1702 \ - --hash=sha256:ab399ef5e3cd2a721b1038a0f3021001f19c5ab279f145e1146bb0b9f1b2b12c \ - --hash=sha256:b0c689c02947d636bc7fab3e30cc3a3445cca99c834dfb77cd4a6cabfc1c5597 \ - --hash=sha256:b2342d87af32790f934a79c3112641e7b27d63c261b8b4395350dad43eff1dc7 \ - --hash=sha256:b58f37edab4a3881bc6c9bca52670610e0c9ca14e2ea3cf9debf185b870457fb \ - --hash=sha256:bd8cb8026e5f5b50498a3c4f196f57f9db344dad829ffae16b82e4fdbaea2813 \ - --hash=sha256:be63c88b32e6c0f1429f1398ca5c09bc64b0d80950c8bb7807d7d7fb36fb84c7 \ - --hash=sha256:c3f293fdc675ccba4db5a561048cca627b5e7bd1c8a6973ffedabe7d116e22e2 \ - --hash=sha256:c41bc64626db62e72afec66b0c8a0da76491510015417c127bfc53b2fe6d7f7f \ - --hash=sha256:ce3a90455492bf8bfa38e56fbbe1dbd4f872a3d8eeaf7337dc3b1c8aa28c271b \ - --hash=sha256:ce7599575eeb25c0f4dc1be59cada6219f3b56176f799627f44088b21381a28a \ - --hash=sha256:dce09d6116df20a96acfdbf85e4866258c3758180e8c49845d6ba8248b6d0bbb \ - --hash=sha256:de8cb00d1483a412a06394b8303feec5dcb3b55f81d83aa216dbb6a0b86a94f5 \ - --hash=sha256:df2c8f3141f7cbd112a6ebbd760290b5849cda01884554f7c67acc14e7b1758a \ - --hash=sha256:e87cbc002b6f440482b3519e36e1313eb5443e9e9e73d6a52d43bd2004fcfd8e \ - --hash=sha256:e888474dee2f59ff68130f8a397792d8cb8e17e6b3434339657ba4ee90845a8c \ - --hash=sha256:f12857d24d98441af6a1d5c87442d624411db486f7ba12550b07788f74b67b04 \ - --hash=sha256:f2d4e43ee362adfc05994ed479334d5a451ab7bc3f3fee1b796b8ca66895acb4 \ - --hash=sha256:f3d6379493e18ad4d39537a82371c5281e153e963cecb13f953ebac155756525 \ - --hash=sha256:f8dff3d9777e5d2703a962ee5c286c239bf0ba173877cc68dc02c17d042e29de \ - --hash=sha256:f9ab915a267fc47c7e88c387a3a28325b58c898e23d4995f765728f4e3dedb97 \ - --hash=sha256:fbe6e89c7ffb48518384068321621b2a69cab509f58e40e4399fdd378fa6d074 \ - --hash=sha256:fd5f135b1bd58ab088930b3c613455796dfa0393626a6972663ccdda5b4ac6ce \ - --hash=sha256:ff870aebe9a93a85283837801d35cd5f8814fe2ad01e606861a7fb47c762a2b7 +grpcio==1.80.0 \ + --hash=sha256:00168469238b022500e486c1c33916acf2f2a9b2c022202cf8a1885d2e3073c1 \ + --hash=sha256:02e64bb0bb2da14d947a49e6f120a75e947250aebe65f9629b62bb1f5c14e6e9 \ + --hash=sha256:05d55e1798756282cddd52d56c896b3e7d673e3a8798c2f1cd05ba249a3bb4de \ + --hash=sha256:09e5e478b3d14afd23f12e49e8b44c8684ac3c5f08561c43a5b9691c54d136ab \ + --hash=sha256:0cb517eb1d0d0aaf1d87af7cc5b801d686557c1d88b2619f5e31fab3c2315921 \ + --hash=sha256:1b97cd29a8eda100b559b455331c487a80915b6ea6bd91cf3e89836c4ee8d957 \ + --hash=sha256:256507e2f524092f1473071a05e65a5b10d84b82e3ff24c5b571513cfaa61e2f \ + --hash=sha256:29aca15edd0688c22ba01d7cc01cb000d72b2033f4a3c72a81a19b56fd143257 \ + --hash=sha256:2bea16af2750fd0a899bf1abd9022244418b55d1f37da2202249ba4ba673838d \ + --hash=sha256:2dcc70e9f0ba987526e8e8603a610fb4f460e42899e74e7a518bf3c68fe1bf05 \ + --hash=sha256:2ed770b4c06984f3b47eb0517b1c69ad0b84ef3f40128f51448433be904634cd \ + --hash=sha256:31b9ac4ad1aa28ffee5503821fafd09e4da0a261ce1c1281c6c8da0423c83b6e \ + --hash=sha256:33eb763f18f006dc7fee1e69831d38d23f5eccd15b2e0f92a13ee1d9242e5e02 \ + --hash=sha256:367ce30ba67d05e0592470428f0ec1c31714cab9ef19b8f2e37be1f4c7d32fae \ + --hash=sha256:3b01e1f5464c583d2f567b2e46ff0d516ef979978f72091fd81f5ab7fa6e2e7f \ + --hash=sha256:3cb8130ba457d2aa09fa6b7c3ed6b6e4e6a2685fce63cb803d479576c4d80e21 \ + --hash=sha256:3d4147a97c8344d065d01bbf8b6acec2cf86fb0400d40696c8bdad34a64ffc0e \ + --hash=sha256:43168871f170d1e4ed16ae03d10cd21efa29f190e710a624cee7e5ae07da6f4f \ + --hash=sha256:448c884b668b868562b1bda833c5fce6272d26e1926ec46747cda05741d302c1 \ + --hash=sha256:4560cf0e86514595dbbd330cd65b7afad4b5c4b8c4905c041cfffa138d45e6fd \ + --hash=sha256:46c2390b59d67f84e882694d489f5b45707c657832d7934859ceb8c33f467069 \ + --hash=sha256:4e78c4ac0d97dc2e569b2f4bcbbb447491167cb358d1a389fc4af71ab6f70411 \ + --hash=sha256:4ed39fbdcf9b87370f6e8df4e39ca7b38b3e5e9d1b0013c7b6be9639d6578d14 \ + --hash=sha256:50a9871536d71c4fba24ee856abc03a87764570f0c457dd8db0b4018f379fed9 \ + --hash=sha256:51b4a7189b0bef2aa30adce3c78f09c83526cf3dddb24c6a96555e3b97340440 \ + --hash=sha256:52d143637e3872633fc7dd7c3c6a1c84e396b359f3a72e215f8bf69fd82084fc \ + --hash=sha256:5c07e82e822e1161354e32da2662f741a4944ea955f9f580ec8fb409dd6f6060 \ + --hash=sha256:627fb7312171cdc52828bd6fac8d7028ff2a64b89f1957b6f3416caa2218d141 \ + --hash=sha256:68e5851ac4b9afe07e7f84483803ad167852570d65326b34d54ca560bfa53fb6 \ + --hash=sha256:7b641fc3f1dc647bfd80bd713addc68f6d145956f64677e56d9ebafc0bd72388 \ + --hash=sha256:8502122a3cc1714038e39a0b071acb1207ca7844208d5ea0d091317555ee7106 \ + --hash=sha256:873ff5d17d68992ef6605330127425d2fc4e77e612fa3c3e0ed4e668685e3140 \ + --hash=sha256:886457a7768e408cdce226ad1ca67d2958917d306523a0e21e1a2fdaa75c9c9c \ + --hash=sha256:8ac393b58aa16991a2f1144ec578084d544038c12242da3a215966b512904d0f \ + --hash=sha256:8eb613f02d34721f1acf3626dfdb3545bd3c8505b0e52bf8b5710a28d02e8aa7 \ + --hash=sha256:92d787312e613754d4d8b9ca6d3297e69994a7912a32fa38c4c4e01c272974b0 \ + --hash=sha256:93b6f823810720912fd131f561f91f5fed0fda372b6b7028a2681b8194d5d294 \ + --hash=sha256:9a6284a5d907c37db53350645567c522be314bac859a64a7a5ca63b77bb7958f \ + --hash=sha256:9fe648599c0e37594c4809d81a9e77bd138cc82eb8baa71b6a86af65426723ff \ + --hash=sha256:a1dc80fe55685b4a543555e6eef975303b36c8db1023b1599b094b92aa77965f \ + --hash=sha256:a361c20ec1ccd3c3953d20fb6d7b4125093bdd10dff44c5e2bbb39e58917cedc \ + --hash=sha256:a72d84ad0514db063e21887fbacd1fd7acb4d494a564cae22227cd45c7fbf199 \ + --hash=sha256:aacdfb4ed3eb919ca997504d27e03d5dba403c85130b8ed450308590a738f7a4 \ + --hash=sha256:ba0915d51fd4ced2db5ff719f84e270afe0e2d4c45a7bdb1e8d036e4502928c2 \ + --hash=sha256:ba0db34f7e1d803a878284cd70e4c63cb6ae2510ba51937bf8f45ba997cefcf7 \ + --hash=sha256:bac1d573dfa84ce59a5547073e28fa7326d53352adda6912e362da0b917fcef4 \ + --hash=sha256:c51bf8ac4575af2e0678bccfb07e47321fc7acb5049b4482832c5c195e04e13a \ + --hash=sha256:c624cc9f1008361014378c9d776de7182b11fe8b2e5a81bc69f23a295f2a1ad0 \ + --hash=sha256:c71309cfce2f22be26aa4a847357c502db6c621f1a49825ae98aa0907595b193 \ + --hash=sha256:ce1794f4ea6cc3ca29463f42d665c32ba1b964b48958a66497917fe9069f26e6 \ + --hash=sha256:d334591df610ab94714048e0d5b4f3dd5ad1bee74dfec11eee344220077a79de \ + --hash=sha256:d8e11f167935b3eb089ac9038e1a063e6d7dbe995c0bb4a661e614583352e76f \ + --hash=sha256:dc053420fc75749c961e2a4c906398d7c15725d36ccc04ae6d16093167223b58 \ + --hash=sha256:deb10a1528473c11f72a0939eed36d83e847d7cbb63e8cc5611fb7a912d38614 \ + --hash=sha256:dfab85db094068ff42e2a3563f60ab3dddcc9d6488a35abf0132daec13209c8a \ + --hash=sha256:e172cf795a3ba5246d3529e4d34c53db70e888fa582a8ffebd2e6e48bc0cba50 \ + --hash=sha256:e9e408fc016dffd20661f0126c53d8a31c2821b5c13c5d67a0f5ed5de93319ad \ + --hash=sha256:ec0a592e926071b4abad50c1495cd0d0d513324b3ff5e7267067c33ba27506e4 \ + --hash=sha256:f14b618fc30de822681ee986cfdcc2d9327229dc4c98aed16896761cacd468b9 \ + --hash=sha256:f49eddcac43c3bf350c0385366a58f36bed8cc2c0ec35ef7b74b49e56552c0c2 \ + --hash=sha256:f7691a6788ad9196872f95716df5bc643ebba13c97140b7a5ee5c8e75d1dea81 # via # -r src/backend/requirements.in # opentelemetry-exporter-otlp-proto-grpc -gunicorn==25.2.0 \ - --hash=sha256:10bd7adb36d44945d97d0a1fdf9a0fb086ae9c7b39e56b4dece8555a6bf4a09c \ - --hash=sha256:88f5b444d0055bf298435384af7294f325e2273fd37ba9f9ff7b98e0a1e5dfdc +gunicorn==25.3.0 \ + --hash=sha256:cacea387dab08cd6776501621c295a904fe8e3b7aae9a1a3cbb26f4e7ed54660 \ + --hash=sha256:f74e1b2f9f76f6cd1ca01198968bd2dd65830edc24b6e8e4d78de8320e2fe889 # via -r src/backend/requirements.in icalendar==7.0.3 \ --hash=sha256:8c9fea6d3a89671bba8b6938d8565b4d0ec465c6a2796ef0f92790dcb9e627cd \ @@ -876,9 +876,9 @@ inflection==0.5.1 \ --hash=sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417 \ --hash=sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2 # via drf-spectacular -invoke==2.2.1 \ - --hash=sha256:2413bc441b376e5cd3f55bb5d364f973ad8bdd7bf87e53c79de3c11bf3feecc8 \ - --hash=sha256:515bf49b4a48932b79b024590348da22f39c4942dff991ad1fb8b8baea1be707 +invoke==3.0.3 \ + --hash=sha256:437b6a622223824380bfb4e64f612711a6b648c795f565efc8625af66fb57f0c \ + --hash=sha256:f11327165e5cbb89b2ad1d88d3292b5113332c43b8553b494da435d6ec6f5053 # via paramiko isodate==0.7.2 \ --hash=sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15 \ @@ -902,151 +902,145 @@ jsonschema-specifications==2025.9.1 \ --hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \ --hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d # via jsonschema -jwcrypto==1.5.6 \ - --hash=sha256:150d2b0ebbdb8f40b77f543fb44ffd2baeff48788be71f67f03566692fd55789 \ - --hash=sha256:771a87762a0c081ae6166958a954f80848820b2ab066937dc8b8379d65b1b039 +jwcrypto==1.5.7 \ + --hash=sha256:70204d7cca406eda8c82352e3c41ba2d946610dafd19e54403f0a1f4f18633c6 \ + --hash=sha256:729463fefe28b6de5cf1ebfda3e94f1a1b41d2799148ef98a01cb9678ebe2bb0 # via django-oauth-toolkit -lxml==6.0.2 \ - --hash=sha256:058027e261afed589eddcfe530fcc6f3402d7fd7e89bfd0532df82ebc1563dba \ - --hash=sha256:063eccf89df5b24e361b123e257e437f9e9878f425ee9aae3144c77faf6da6d8 \ - --hash=sha256:064fdadaf7a21af3ed1dcaa106b854077fbeada827c18f72aec9346847cd65d0 \ - --hash=sha256:08b9d5e803c2e4725ae9e8559ee880e5328ed61aa0935244e0515d7d9dbec0aa \ - --hash=sha256:0a3c150a95fbe5ac91de323aa756219ef9cf7fde5a3f00e2281e30f33fa5fa4f \ - --hash=sha256:0aa7070978f893954008ab73bb9e3c24a7c56c054e00566a21b553dc18105fca \ - --hash=sha256:13dcecc9946dca97b11b7c40d29fba63b55ab4170d3c0cf8c0c164343b9bfdcf \ - --hash=sha256:13e35cbc684aadf05d8711a5d1b5857c92e5e580efa9a0d2be197199c8def607 \ - --hash=sha256:17f68764f35fd78d7c4cc4ef209a184c38b65440378013d24b8aecd327c3e0c8 \ - --hash=sha256:1941354d92699fb5ffe6ed7b32f9649e43c2feb4b97205f75866f7d21aa91452 \ - --hash=sha256:1c06035eafa8404b5cf475bb37a9f6088b0aca288d4ccc9d69389750d5543700 \ - --hash=sha256:1db01e5cf14345628e0cbe71067204db658e2fb8e51e7f33631f5f4735fefd8d \ - --hash=sha256:1e786a464c191ca43b133906c6903a7e4d56bef376b75d97ccbb8ec5cf1f0a4b \ - --hash=sha256:1ea99340b3c729beea786f78c38f60f4795622f36e305d9c9be402201efdc3b7 \ - --hash=sha256:200069a593c5e40b8f6fc0d84d86d970ba43138c3e68619ffa234bc9bb806a4d \ - --hash=sha256:2047d8234fe735ab77802ce5f2297e410ff40f5238aec569ad7c8e163d7b19a6 \ - --hash=sha256:21c73b476d3cfe836be731225ec3421fa2f048d84f6df6a8e70433dff1376d5a \ - --hash=sha256:24a8e756c982c001ca8d59e87c80c4d9dcd4d9b44a4cbeb8d9be4482c514d41d \ - --hash=sha256:252a22982dca42f6155125ac76d3432e548a7625d56f5a273ee78a5057216eca \ - --hash=sha256:2593c77efde7bfea7f6389f1ab249b15ed4aa5bc5cb5131faa3b843c429fbedb \ - --hash=sha256:25fcc59afc57d527cfc78a58f40ab4c9b8fd096a9a3f964d2781ffb6eb33f4ed \ - --hash=sha256:2613e67de13d619fd283d58bda40bff0ee07739f624ffee8b13b631abf33083d \ - --hash=sha256:27220da5be049e936c3aca06f174e8827ca6445a4353a1995584311487fc4e3e \ - --hash=sha256:2c8458c2cdd29589a8367c09c8f030f1d202be673f0ca224ec18590b3b9fb694 \ - --hash=sha256:2ca59e7e13e5981175b8b3e4ab84d7da57993eeff53c07764dcebda0d0e64ecd \ - --hash=sha256:2cbcbf6d6e924c28f04a43f3b6f6e272312a090f269eff68a2982e13e5d57659 \ - --hash=sha256:2ed6c667fcbb8c19c6791bbf40b7268ef8ddf5a96940ba9404b9f9a304832f6c \ - --hash=sha256:358d9adae670b63e95bc59747c72f4dc97c9ec58881d4627fe0120da0f90d314 \ - --hash=sha256:370cd78d5855cfbffd57c422851f7d3864e6ae72d0da615fca4dad8c45d375a5 \ - --hash=sha256:3ae2ce7d6fedfb3414a2b6c5e20b249c4c607f72cb8d2bb7cc9c6ec7c6f4e849 \ - --hash=sha256:3b1675e096e17c6fe9c0e8c81434f5736c0739ff9ac6123c87c2d452f48fc938 \ - --hash=sha256:3e3cb08855967a20f553ff32d147e14329b3ae70ced6edc2f282b94afbc74b2a \ - --hash=sha256:3efe1b21c7801ffa29a1112fab3b0f643628c30472d507f39544fd48e9549e34 \ - --hash=sha256:3fee0851639d06276e6b387f1c190eb9d7f06f7f53514e966b26bae46481ec90 \ - --hash=sha256:4077b7c79f31755df33b795dc12119cb557a0106bfdab0d2c2d97bd3cf3dffa6 \ - --hash=sha256:414aaa94e974e23a3e92e7ca5b97d10c0cf37b6481f50911032c69eeb3991bba \ - --hash=sha256:4197fb2534ee05fd3e7afaab5d8bfd6c2e186f65ea7f9cd6a82809c887bd1285 \ - --hash=sha256:442de7530296ef5e188373a1ea5789a46ce90c4847e597856570439621d9c553 \ - --hash=sha256:4468e3b83e10e0317a89a33d28f7aeba1caa4d1a6fd457d115dd4ffe90c5931d \ - --hash=sha256:452b899faa64f1805943ec1c0c9ebeaece01a1af83e130b69cdefeda180bb42c \ - --hash=sha256:45f93e6f75123f88d7f0cfd90f2d05f441b808562bf0bc01070a00f53f5028b5 \ - --hash=sha256:48461bd21625458dd01e14e2c38dd0aea69addc3c4f960c30d9f59d7f93be601 \ - --hash=sha256:4ddb1049fa0579d0cbd00503ad8c58b9ab34d1254c77bc6a5576d96ec7853dba \ - --hash=sha256:5179c60288204e6ddde3f774a93350177e08876eaf3ab78aa3a3649d43eb7d37 \ - --hash=sha256:57a86e1ebb4020a38d295c04fc79603c7899e0df71588043eb218722dabc087f \ - --hash=sha256:5921d924aa5468c939d95c9814fa9f9b5935a6ff4e679e26aaf2951f74043512 \ - --hash=sha256:59c45e125140b2c4b33920d21d83681940ca29f0b83f8629ea1a2196dc8cfe6a \ - --hash=sha256:5aa0fc67ae19d7a64c3fe725dc9a1bb11f80e01f78289d05c6f62545affec438 \ - --hash=sha256:5d444858b9f07cefff6455b983aea9a67f7462ba1f6cbe4a21e8bf6791bf2153 \ - --hash=sha256:60fa43be34f78bebb27812ed90f1925ec99560b0fa1decdb7d12b84d857d31e9 \ - --hash=sha256:6162a86d86893d63084faaf4ff937b3daea233e3682fb4474db07395794fa80d \ - --hash=sha256:61cb10eeb95570153e0c0e554f58df92ecf5109f75eacad4a95baa709e26c3d6 \ - --hash=sha256:65ac4a01aba353cfa6d5725b95d7aed6356ddc0a3cd734de00124d285b04b64f \ - --hash=sha256:65ea18d710fd14e0186c2f973dc60bb52039a275f82d3c44a0e42b43440ea534 \ - --hash=sha256:6605c604e6daa9e0d7f0a2137bdc47a2e93b59c60a65466353e37f8272f47c46 \ - --hash=sha256:66328dabea70b5ba7e53d94aa774b733cf66686535f3bc9250a7aab53a91caaf \ - --hash=sha256:6c8963287d7a4c5c9a432ff487c52e9c5618667179c18a204bdedb27310f022f \ - --hash=sha256:6cdaefac66e8b8f30e37a9b4768a391e1f8a16a7526d5bc77a7928408ef68e93 \ - --hash=sha256:6da5185951d72e6f5352166e3da7b0dc27aa70bd1090b0eb3f7f7212b53f1bb8 \ - --hash=sha256:6ddff43f702905a4e32bc24f3f2e2edfe0f8fde3277d481bffb709a4cced7a1f \ - --hash=sha256:6ec0e3f745021bfed19c456647f0298d60a24c9ff86d9d051f52b509663feeb1 \ - --hash=sha256:6f91fd2b2ea15a6800c8e24418c0775a1694eefc011392da73bc6cef2623b322 \ - --hash=sha256:700efd30c0fa1a3581d80a748157397559396090a51d306ea59a70020223d16f \ - --hash=sha256:71695772df6acea9f3c0e59e44ba8ac50c4f125217e84aab21074a1a55e7e5c9 \ - --hash=sha256:72c87e5ee4e58a8354fb9c7c84cbf95a1c8236c127a5d1b7683f04bed8361e1f \ - --hash=sha256:7d2de809c2ee3b888b59f995625385f74629707c9355e0ff856445cdcae682b7 \ - --hash=sha256:80dadc234ebc532e09be1975ff538d154a7fa61ea5031c03d25178855544728f \ - --hash=sha256:817ef43a0c0b4a77bd166dc9a09a555394105ff3374777ad41f453526e37f9cb \ - --hash=sha256:846ae9a12d54e368933b9759052d6206a9e8b250291109c48e350c1f1f49d916 \ - --hash=sha256:875c6b5ab39ad5291588aed6925fac99d0097af0dd62f33c7b43736043d4a2ec \ - --hash=sha256:8799481bbdd212470d17513a54d568f44416db01250f49449647b5ab5b5dccb9 \ - --hash=sha256:8ac6e5811ae2870953390452e3476694196f98d447573234592d30488147404d \ - --hash=sha256:8f8d0cbd0674ee89863a523e6994ac25fd5be9c8486acfc3e5ccea679bad2679 \ - --hash=sha256:901e3b4219fa04ef766885fb40fa516a71662a4c61b80c94d25336b4934b71c0 \ - --hash=sha256:90a345bbeaf9d0587a3aaffb7006aa39ccb6ff0e96a57286c0cb2fd1520ea192 \ - --hash=sha256:9261bb77c2dab42f3ecd9103951aeca2c40277701eb7e912c545c1b16e0e4917 \ - --hash=sha256:945da35a48d193d27c188037a05fec5492937f66fb1958c24fc761fb9d40d43c \ - --hash=sha256:957448ac63a42e2e49531b9d6c0fa449a1970dbc32467aaad46f11545be9af1d \ - --hash=sha256:967aab75434de148ec80597b75062d8123cadf2943fb4281f385141e18b21338 \ - --hash=sha256:98a5e1660dc7de2200b00d53fa00bcd3c35a3608c305d45a7bbcaf29fa16e83d \ - --hash=sha256:995e783eb0374c120f528f807443ad5a83a656a8624c467ea73781fc5f8a8304 \ - --hash=sha256:9b33d21594afab46f37ae58dfadd06636f154923c4e8a4d754b0127554eb2e77 \ - --hash=sha256:a4bf42d2e4cf52c28cc1812d62426b9503cdb0c87a6de81442626aa7d69707ba \ - --hash=sha256:a59f5448ba2ceccd06995c95ea59a7674a10de0810f2ce90c9006f3cbc044456 \ - --hash=sha256:a656ca105115f6b766bba324f23a67914d9c728dafec57638e2b92a9dcd76c62 \ - --hash=sha256:a6b5b39cc7e2998f968f05309e666103b53e2edd01df8dc51b90d734c0825444 \ - --hash=sha256:a7c5d5e5f1081955358533be077166ee97ed2571d6a66bdba6ec2f609a715d1a \ - --hash=sha256:a8bef9b9825fa8bc816a6e641bb67219489229ebc648be422af695f6e7a4fa7f \ - --hash=sha256:a8ffaeec5dfea5881d4c9d8913a32d10cfe3923495386106e4a24d45300ef79c \ - --hash=sha256:abd44571493973bad4598a3be7e1d807ed45aa2adaf7ab92ab7c62609569b17d \ - --hash=sha256:ac02dc29fd397608f8eb15ac1610ae2f2f0154b03f631e6d724d9e2ad4ee2c84 \ - --hash=sha256:af85529ae8d2a453feee4c780d9406a5e3b17cee0dd75c18bd31adcd584debc3 \ - --hash=sha256:b0c732aa23de8f8aec23f4b580d1e52905ef468afb4abeafd3fec77042abb6fe \ - --hash=sha256:b2142a376b40b6736dfc214fd2902409e9e3857eff554fed2d3c60f097e62a62 \ - --hash=sha256:b22a07cbb82fea98f8a2fd814f3d1811ff9ed76d0fc6abc84eb21527596e7cc8 \ - --hash=sha256:b2c3da8d93cf5db60e8858c17684c47d01fee6405e554fb55018dd85fc23b178 \ - --hash=sha256:b2c7fdaa4d7c3d886a42534adec7cfac73860b89b4e5298752f60aa5984641a0 \ - --hash=sha256:b30d46379644fbfc3ab81f8f82ae4de55179414651f110a1514f0b1f8f6cb2d7 \ - --hash=sha256:b42f4d86b451c2f9d06ffb4f8bbc776e04df3ba070b9fe2657804b1b40277c48 \ - --hash=sha256:b738f7e648735714bbb82bdfd030203360cfeab7f6e8a34772b3c8c8b820568c \ - --hash=sha256:b7fc49c37f1786284b12af63152fe1d0990722497e2d5817acfe7a877522f9a9 \ - --hash=sha256:b8f18914faec94132e5b91e69d76a5c1d7b0c73e2489ea8929c4aaa10b76bbf7 \ - --hash=sha256:bb2f6ca0ae2d983ded09357b84af659c954722bbf04dea98030064996d156048 \ - --hash=sha256:bb4c1847b303835d89d785a18801a883436cdfd5dc3d62947f9c49e24f0f5a2c \ - --hash=sha256:bc456d04db0515ce3320d714a1eac7a97774ff0849e7718b492d957da4631dd4 \ - --hash=sha256:bc532422ff26b304cfb62b328826bd995c96154ffd2bac4544f37dbb95ecaa8f \ - --hash=sha256:be3aaa60da67e6153eb15715cc2e19091af5dc75faef8b8a585aea372507384b \ - --hash=sha256:c33e66d44fe60e72397b487ee92e01da0d09ba2d66df8eae42d77b6d06e5eba0 \ - --hash=sha256:c371aa98126a0d4c739ca93ceffa0fd7a5d732e3ac66a46e74339acd4d334564 \ - --hash=sha256:c54d83a2188a10ebdba573f16bd97135d06c9ef60c3dc495315c7a28c80a263f \ - --hash=sha256:c7d13103045de1bdd6fe5d61802565f1a3537d70cd3abf596aa0af62761921ee \ - --hash=sha256:cb233f9c95f83707dae461b12b720c1af9c28c2d19208e1be03387222151daf5 \ - --hash=sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62 \ - --hash=sha256:cdcbed9ad19da81c480dfd6dd161886db6096083c9938ead313d94b30aadf272 \ - --hash=sha256:d100fcc8930d697c6561156c6810ab4a508fb264c8b6779e6e61e2ed5e7558f9 \ - --hash=sha256:d4aec24d6b72ee457ec665344a29acb2d35937d5192faebe429ea02633151aad \ - --hash=sha256:d6690ec5ec1cce0385cb20896b16be35247ac8c2046e493d03232f1c2414d321 \ - --hash=sha256:d759cdd7f3e055d6bc8d9bec3ad905227b2e4c785dc16c372eb5b5e83123f48a \ - --hash=sha256:da08e7bb297b04e893d91087df19638dc7a6bb858a954b0cc2b9f5053c922312 \ - --hash=sha256:dacf3c64ef3f7440e3167aa4b49aa9e0fb99e0aa4f9ff03795640bf94531bcb0 \ - --hash=sha256:daf42de090d59db025af61ce6bdb2521f0f102ea0e6ea310f13c17610a97da4c \ - --hash=sha256:dc051506c30b609238d79eda75ee9cab3e520570ec8219844a72a46020901e37 \ - --hash=sha256:de496365750cc472b4e7902a485d3f152ecf57bd3ba03ddd5578ed8ceb4c5964 \ - --hash=sha256:dfb874cfa53340009af6bdd7e54ebc0d21012a60a4e65d927c2e477112e63484 \ - --hash=sha256:e19e0643cc936a22e837f79d01a550678da8377d7d801a14487c10c34ee49c7e \ - --hash=sha256:e237b807d68a61fc3b1e845407e27e5eb8ef69bc93fe8505337c1acb4ee300b6 \ - --hash=sha256:e5867f2651016a3afd8dd2c8238baa66f1e2802f44bc17e236f547ace6647078 \ - --hash=sha256:e748d4cf8fef2526bb2a589a417eba0c8674e29ffcb570ce2ceca44f1e567bf6 \ - --hash=sha256:e77dd455b9a16bbd2a5036a63ddbd479c19572af81b624e79ef422f929eef388 \ - --hash=sha256:e8113639f3296706fbac34a30813929e29247718e88173ad849f57ca59754924 \ - --hash=sha256:e8cd2415f372e7e5a789d743d133ae474290a90b9023197fd78f32e2dc6873e2 \ - --hash=sha256:eb2a12d704f180a902d7fa778c6d71f36ceb7b0d317f34cdc76a5d05aa1dd1df \ - --hash=sha256:ef9266d2aa545d7374938fb5c484531ef5a2ec7f2d573e62f8ce722c735685fd \ - --hash=sha256:f2a50c3c1d11cad0ebebbac357a97b26aa79d2bcaf46f256551152aa85d3a4d1 \ - --hash=sha256:f2e3b1a6bb38de0bc713edd4d612969dd250ca8b724be8d460001a387507021c \ - --hash=sha256:f952dacaa552f3bb8834908dddd500ba7d508e6ea6eb8c52eb2d28f48ca06a31 \ - --hash=sha256:fa25afbadead523f7001caf0c2382afd272c315a033a7b06336da2637d92d6ed \ - --hash=sha256:fb8dae0b6b8b7f9e96c26fdd8121522ce5de9bb5538010870bd538683d30e9a2 \ - --hash=sha256:fbc74f42c3525ac4ffa4b89cbdd00057b6196bcefe8bce794abd42d33a018092 \ - --hash=sha256:fe659f6b5d10fb5a17f00a50eb903eb277a71ee35df4615db573c069bcf967ac +lxml==6.0.3 \ + --hash=sha256:04b7cedf52e125f86d0d426635e7fbe8e353d4cc272a1757888e3c072424381d \ + --hash=sha256:06b9f3ac459b4565bbaa97aa5512aa7f9a1188c662f0108364f288f6daf35773 \ + --hash=sha256:093786037b934ef4747b0e8a0e1599fe7df7dd8246e7f07d43bba1c4c8bd7b84 \ + --hash=sha256:0a9a79144a8051bc5fbb223fac895b87eb67b361f27b00c2ed4a07ee34246b90 \ + --hash=sha256:0b012cf200736d90f828b3ab4206857772c61b710f0a98d3814c7994decb6652 \ + --hash=sha256:0c46a246df7fbab1f7b018c7eb361585b295ac95dec806158d9ed1e63b477f05 \ + --hash=sha256:10bc4f37c28b4e1b3e901dde66e3a096eb128acf388d5b2962dc2941284293bb \ + --hash=sha256:13f1594a183cee73f9a1dbfd35871c4e04b461f47eeb9bcf80f7d7856b1b136d \ + --hash=sha256:143ac903fb6c9be6da613390825c8e8bb8c8d71517d43882031f6b9bc89770ef \ + --hash=sha256:16e5cbaa1a6351f2abefa4072e9aac1f09103b47fe7ab4496d54e5995b065162 \ + --hash=sha256:16fbcf06ae534b2fa5bcdc19fcf6abd9df2e74fe8563147d1c5a687a130efed4 \ + --hash=sha256:19b079e81aa3a31b523a224b0dd46da4f56e1b1e248eef9a599e5c885c788813 \ + --hash=sha256:1b36a3c73f2a6d9c2bfae78089ca7aedae5c2ee5fd5214a15f00b2f89e558ba7 \ + --hash=sha256:1b60a3a1205f869bd47874787c792087174453b1a869db4837bf5b3ff92be017 \ + --hash=sha256:20f8caa9beb61a688c4428631cb47fd6e0ba75ef30091cec5fee992138b2be77 \ + --hash=sha256:239e9a6be3a79c03ec200d26f7bb17a4414704a208059e20050bf161e2d8848a \ + --hash=sha256:26cdd7c3f4c3b932b28859d0b70966c2ec8b67c106717d6320121002f8f99025 \ + --hash=sha256:2773dbe2cedee81f2769bd5d24ceb4037706cf032e1703513dd0e9476cd9375f \ + --hash=sha256:27e317e554bc6086a082688ddf137437e5f7f20ffdd736a6f5b4e3ed1ecf1247 \ + --hash=sha256:2a49123cc3209ccad7c4c5a4133bcfcfd4875f30461ea4d0aaa84e6608f712c5 \ + --hash=sha256:2ce76d113a7c3bf42761ec1de7ca615b0cbf9d8ae478eb1d6c20111d9c9fc098 \ + --hash=sha256:2d00902610dd91a970a06d5f1a6e4f2426e04a9fa07209d58e09b345e2269267 \ + --hash=sha256:30c437d8bb9a9a9edff27e85b694342e47a26a6abc249abe00584a4824f9d80d \ + --hash=sha256:322c825054d02d35755b80dc5c39ba8a71c7c09c43453394a13b9bd8c0abc84c \ + --hash=sha256:336925309af5ecd9616acbe1c28d68ee0088839b1d42ae7dcc40ffecff959537 \ + --hash=sha256:33741ec3b4268efffae8ba40f9b64523f4489caf270bde175535e659f03af05a \ + --hash=sha256:353161f166e76f0d8228f8f5216d110601d143a8b6d0fd869230e12c098a5842 \ + --hash=sha256:38652c280cf50cc5cf955e3d0b691fa6a97046d84407bbae340d8e353f9014ef \ + --hash=sha256:38acf7171535ffa7fff1fcec8b82ebd4e55cd02e581efe776928108421accaa1 \ + --hash=sha256:3a0484bd1e84f82766befcbd71cccd7307dacfe08071e4dbc1d9a9b498d321e8 \ + --hash=sha256:448e69211e59c39f398990753d15ba49f7218ec128f64ac8012ef16762e509a3 \ + --hash=sha256:46c80f7fd5dd7d8c269f6486b165c8f91c489e323f3a767221fb5b4b2b388d5f \ + --hash=sha256:4723da3e8f4281853c2eaab161b69cc14bc9b0811be4cfa5a1de36df47e0c660 \ + --hash=sha256:4b0f01fb8bdcaf4aa69cf55b2b2f8ef722e4423e1c020e7250dcb89a1d5db38e \ + --hash=sha256:4ff774b43712b0cf40d9888a5494ca39aefe990c946511cc947b9fddcf74a29b \ + --hash=sha256:50293e024afe5e2c25da2be68c8ceca8618912a0701a73f75b488317c8081aa6 \ + --hash=sha256:51014ee2ab2091dcd9cdef92532f0a1addb7c2cc52a2bd70682e441363de5c0d \ + --hash=sha256:5892d2ef99449ebd8e30544af5bc61fd9c30e9e989093a10589766422f6c5e1a \ + --hash=sha256:59ff244cee0270fc4cf5f2ee920d4493ee88d0bcbc6e8465e9ef01439f1785e7 \ + --hash=sha256:5b6913a68d98c58c673667c864500ba31bc9b0f462effac98914e9a92ebacd2e \ + --hash=sha256:5c35e5c3ed300990a46a144d3514465713f812b35dacfa83e928c60db7c90af7 \ + --hash=sha256:5c45bdcdc2ca6cf26fddff3faa5de7a2ed7c7f6016b3de80125313a37f972378 \ + --hash=sha256:5d559a84b2fd583e5bcf8ec4af1ec895f98811684d5fbd6524ea31a04f92d4ad \ + --hash=sha256:609bf136a7339aeca2bd4268c7cd190f33d13118975fe9964eda8e5138f42802 \ + --hash=sha256:61399a5b01d74ec5f009762c74ab6ebf387e58393fc5d78368e12d4f577fea29 \ + --hash=sha256:6289cb9145fbbc5b0e159c9fcd7fc09446dadc6b60b72c4d1012e80c7c727970 \ + --hash=sha256:631567ffc3ddb989ccdcd28f6b9fa5aab1ec7fc0e99fe65572b006a6aad347e2 \ + --hash=sha256:6364aa77b13e04459df6a9d2b806465287e7540955527e75ebd5fda48532913d \ + --hash=sha256:6556b3197bd8a237a16fcd7278d09f094c5777ae36a1435b5e8e488826386d96 \ + --hash=sha256:6c055bafdcb53e7f9f75e22c009cd183dd410475e21c296d599531d7f03d1bf5 \ + --hash=sha256:724b26a38cef98d6869d00a33cb66083bee967598e44f6a8e53f1dd283c851b0 \ + --hash=sha256:72d108ef9e39f45c6865ea8a5ba6736c0b1a33ddd6343653775349869e58c30b \ + --hash=sha256:7373ede7ccb89e6f6e39c1423b3a4d4ee48035d3b4619a6addced5c8b48d0ecc \ + --hash=sha256:738aef404c862d2c3cd951364ee7175c9d50e8290f5726611c4208c0fba8d186 \ + --hash=sha256:773c22d3de2dd5454b0f89b36d366fa0052f0e924656506c40462d8107acd00f \ + --hash=sha256:775266571f7027b1d77f5fce18a247b24f51a4404bdc1b90ec56be9b1e3801b9 \ + --hash=sha256:794b42f0112adfa3f23670aba5bc0ac9c9adfcee699c0df129b0186c812ac3ff \ + --hash=sha256:7966fbce2d18fde579d5593933d36ad98cc7c8dc7f2b1916d127057ce0415062 \ + --hash=sha256:7f753db5785ce019d7b25bb75638ef5a42a0e208aa9f19933262134e668ca6af \ + --hash=sha256:809726d4c72f1a902556df822c3acc5780053a12a05e16eac999392b30984c06 \ + --hash=sha256:821fd53699eb498990c915ba955a392d07246454c9405e6c1d0692362503013d \ + --hash=sha256:8243937d4673b46da90b4f5ea2627fd26842225e62e885828fdb8133aa1f7b32 \ + --hash=sha256:8341c446fca7f6be003c60aededf2f23a53d4881cf7e0bafb9cef69c217ae26a \ + --hash=sha256:83c1d75e9d124ab82a4ddaf59135112f0dc49526b47355e5928ae6126a68e236 \ + --hash=sha256:83eca62141314d641ebe8089ffa532bbf572ea07dd6255b58c40130d06bb2509 \ + --hash=sha256:841b89fc3d910d61c7c267db6bb7dc3a8b3dac240edb66220fcdf96fe70a0552 \ + --hash=sha256:87bebd6836e88c0a007f66b89814daf5d7041430eb491c91d1851abc89aa6e93 \ + --hash=sha256:88c524cf8c3b8d71dfc3de6cfb225138a876862a92d88bfa22eb9ff020729d45 \ + --hash=sha256:8922a30704a4421d69a19e0499db5861da686c0bccc3a79cf3946e3155cf25f9 \ + --hash=sha256:89f8746c206d8cf2c167221831645d6cc2b24464afd9c428a5eb3fd34c584eb1 \ + --hash=sha256:8b81ec1ecac3be8c1ff1e00ca1c1baf8122e87db9000cd2549963847bd5e3b41 \ + --hash=sha256:8c082ad2398664213a4bb5d133e2eb8bf239220b7d6688f8c8ffa9050057501f \ + --hash=sha256:8c08926678852a233bf1ef645c4d683d56107f814482f8f41b21ef2c7659790e \ + --hash=sha256:8d10a75e4d0a6a9ac2fec2f7ade682f468b51935102c70dab638fa4e94ffcb04 \ + --hash=sha256:8eeec925ad7f81886d413b3a1f8715551f75543519229a9b35e957771e1826d5 \ + --hash=sha256:911dbd0e87729016402e03533117ffe94147bfbcd7902b76af5854c4b437e096 \ + --hash=sha256:955550c78afb2be47755bd1b8153724292a5b539cf3f21665b310c145d08e6f8 \ + --hash=sha256:976b56bd0f4ca72280b4569eb227d012a541860f0d6fcc128ce26d22ef82c845 \ + --hash=sha256:99457524afd384c330dc51e527976653d543ccadfa815d9f2d92c5911626e536 \ + --hash=sha256:9a1adb0e220cb8691202ba9d97646a06292657a122df4b92733861d42f7cf4d2 \ + --hash=sha256:9b8e0779780026979f217603385995202f364adc9807bd21210d81b9f562fc4e \ + --hash=sha256:9d98063e6ae0da5084ec46952bb0a5ccb5e2cad168e32b4d65d1ec84e4b4ebd4 \ + --hash=sha256:a10f9967859229cae38b1aa7a96eb655c96b8adc96989b52c5b1f77d963a77a4 \ + --hash=sha256:a1664c5139755df44cab3834f4400b331b02205d62d3fdcb1554f63439bf3372 \ + --hash=sha256:a1f258e6aa0e6eda2c1199f5582c062c96c7d4a28d96d0c4daa79e39b3f2a764 \ + --hash=sha256:a4dc9f81707b9b56888fa7d3a889ac5219724cf0fbecab90ea5b197faf649534 \ + --hash=sha256:a6380c5035598e4665272ad3fc86c96ddb2a220d4059cce5ba4b660f78346ad9 \ + --hash=sha256:aa18653b795d2c273b8676f7ad2ca916d846d15864e335f746658e4c28eb5168 \ + --hash=sha256:abc39c4fb67f029400608f9a3a4a3f351ccb3c061b05fd3ad113e4cfbba8a8ee \ + --hash=sha256:ac2d6cdafa29672d6a604c641bf67ace3fd0735ec6885501a94943379219ddbf \ + --hash=sha256:ac63a1ef1899ccadace10ac937c41321672771378374c254e931d001448ae372 \ + --hash=sha256:ac65c08ba1bd90f662cb1d5c79f7ae4c53b1c100f0bb6ec5df1f40ac29028a7e \ + --hash=sha256:ad6952810349cbfb843fe15e8afc580b2712359ae42b1d2b05d097bd48c4aea4 \ + --hash=sha256:b044fe3bdb8b68efa33cb5917ae9379f07ec2e416ecd18cf5d333650d6d2fcbb \ + --hash=sha256:b29300eeaadf85df7f2df4bb29cadfb13b9600d1bb8053f35d82d96f9e6d088a \ + --hash=sha256:b683665d0287308adafc90a5617a51a508d8af8c7040693693bb333b5f4474fe \ + --hash=sha256:b68c29aac4788438b07d768057836de47589c7deaa3ad8dc4af488dfc27be388 \ + --hash=sha256:bd4f70e091f2df300396bc9ce36963f90b87611324c2ca750072a6e6375beba2 \ + --hash=sha256:bf98f5f87f6484302e7cce4e2ca5af43562902852063d916c3e2f1c115fdce60 \ + --hash=sha256:c137f8c8419c3de93e2998131d94628805f148e52b34da6d7533454e4d78bc2a \ + --hash=sha256:c157bfef4e3b19688eb4da783c5bfabf5a3ac1ac8d317e0906f3feb18d4c89b7 \ + --hash=sha256:c3de55b53f69ffa2fcfd897bd8a7e62f0f88a40a8a0c544e171e813f9d4ddbf5 \ + --hash=sha256:c4fff7d77f440378cd841e340398edf5dbefee334816efbf521bb6e31651e54e \ + --hash=sha256:c71a387ea133481e725079cff22de45593bf0b834824de22829365ab1d2386c9 \ + --hash=sha256:c8184fdb2259bda1db2db9d6e25f667769afc2531830b4fa29f83f66a7872dea \ + --hash=sha256:c8e3b8a54e65393ce1d5c7d9753fe756f0d96089e7163b20ddec3e5bb56a963e \ + --hash=sha256:cbc7ce67f85b92db97c92219985432be84dc1ba9a028e68c6933e89551234df2 \ + --hash=sha256:cbffd22fc8e4d80454efa968b0c93440a00b8b8a817ce0c29d2c6cb5ad324362 \ + --hash=sha256:ce01ab3449015358f766a1950b3d818eedf9d4cdec3fa87e4eecaad10c0784db \ + --hash=sha256:d1f14c1006722824c3f2158d147e520a82460b47ffdc2a84e444b3d244b65e4d \ + --hash=sha256:d20af2784c763928d0d0879cbc5a3739e4d81eefa0d68962d3478bff4c13e644 \ + --hash=sha256:d38c25bad123d6ce30bb37931d90a4e8a167cd796eeae9cd16c2bfce52718f8e \ + --hash=sha256:d3d65e511e4e656ec67b472110f7a72cbf8547ca15f76fe74cffa4e97412a064 \ + --hash=sha256:d573b81c29e20b1513afa386a544797a99cecde5497e6c77b6dfa4484112c819 \ + --hash=sha256:d8781d812bb8efd47c35651639da38980383ff0d0c1f3269ade23e3a90799079 \ + --hash=sha256:d8a8129bd502de138cdde22eac3990bde8a4efbafc72596baab67a495c48c974 \ + --hash=sha256:d9e779a9c3167d2f158c41b6347fbc9e855f6d5561920a33123beb86463c3f46 \ + --hash=sha256:dfc80c74233fe01157ab550fb12b9d07a2f1fa7c5900cefb484e3bf02e856fbc \ + --hash=sha256:e0c88ca5fb307f7e817fc427681126e4712d3452258577bcb4ca86594c934852 \ + --hash=sha256:e759ff1b244725fef428c6b54f3dab4954c293b2d242a5f2e79db5cc3873de51 \ + --hash=sha256:e8ad05bb1fb4aa20ee201ab2f21c3c7571828e4fad525707437bb1c5f5ab6669 \ + --hash=sha256:ecdded59dc50c0c28f652a98f69a7ada8bd2377248bf48c4a83c81204eb58b33 \ + --hash=sha256:ed31e5852cd938704bc6c7a3822cbf84c7fa00ebfa914a1b4e2392d44f45bdfb \ + --hash=sha256:edccf1157677db1da741d042601754b94af3926310c5763179200718ca738e70 \ + --hash=sha256:f179bae37ad673f57756b59f26833b7922230bef471fdb29492428f152bae8c6 \ + --hash=sha256:f27373113fda6621e4201f529908a24c8a190c2af355aed4711dadca44db4673 \ + --hash=sha256:f297e9be3bbe59c31cfe5d0f38534510ed95856c480df3e8721b16d46ccaeeac \ + --hash=sha256:f8f004d5c601eb50ac29a110632595a4f4c50db81c715d46a43de64ef88246cb \ + --hash=sha256:f96bba9a26a064ce9e11099bad12fb08384b64d3acc0acf94bf386ca5cf4f95f \ + --hash=sha256:fab00cef83d4f9d76c5e0722346e84bc174b071d68b4f725aeb0bf3877b9e6a6 \ + --hash=sha256:fc6eeeddcee4d985707b3fc29fd6993e256e55798ca600586da68d3f0e04ec5a \ + --hash=sha256:fdb7786ebefaa0dad0d399dfeaf146b370a14591af2f3aea59e06f931a426678 \ + --hash=sha256:fddcf558bcb7a40993fb9e3ae3752d5d3a656479c71687799e43063563a2e68a \ + --hash=sha256:feb5b9ed7d0510663a78b94f2b417a41c41b42a7bb157ef398ef9d78e6f0fd50 # via # python3-saml # xmlsec @@ -1322,98 +1316,98 @@ pdf2image==1.17.0 \ --hash=sha256:eaa959bc116b420dd7ec415fcae49b98100dda3dd18cd2fdfa86d09f112f6d57 \ --hash=sha256:ecdd58d7afb810dffe21ef2b1bbc057ef434dabbac6c33778a38a3f7744a27e2 # via -r src/backend/requirements.in -pillow==12.1.1 \ - --hash=sha256:02f84dfad02693676692746df05b89cf25597560db2857363a208e393429f5e9 \ - --hash=sha256:0330d233c1a0ead844fc097a7d16c0abff4c12e856c0b325f231820fee1f39da \ - --hash=sha256:03edcc34d688572014ff223c125a3f77fb08091e4607e7745002fc214070b35f \ - --hash=sha256:097690ba1f2efdeb165a20469d59d8bb03c55fb6621eb2041a060ae8ea3e9642 \ - --hash=sha256:178aa072084bd88ec759052feca8e56cbb14a60b39322b99a049e58090479713 \ - --hash=sha256:18e5bddd742a44b7e6b1e773ab5db102bd7a94c32555ba656e76d319d19c3850 \ - --hash=sha256:1a9b0ee305220b392e1124a764ee4265bd063e54a751a6b62eff69992f457fa9 \ - --hash=sha256:1f1625b72740fdda5d77b4def688eb8fd6490975d06b909fd19f13f391e077e0 \ - --hash=sha256:1f1be78ce9466a7ee64bfda57bdba0f7cc499d9794d518b854816c41bf0aa4e9 \ - --hash=sha256:1f90cff8aa76835cba5769f0b3121a22bd4eb9e6884cfe338216e557a9a548b8 \ - --hash=sha256:21329ec8c96c6e979cd0dfd29406c40c1d52521a90544463057d2aaa937d66a6 \ - --hash=sha256:2815a87ab27848db0321fb78c7f0b2c8649dee134b7f2b80c6a45c6831d75ccd \ - --hash=sha256:2c1fc0f2ca5f96a3c8407e41cca26a16e46b21060fe6d5b099d2cb01412222f5 \ - --hash=sha256:2e0c664be47252947d870ac0d327fea7e63985a08794758aa8af5b6cb6ec0c9c \ - --hash=sha256:339ffdcb7cbeaa08221cd401d517d4b1fe7a9ed5d400e4a8039719238620ca35 \ - --hash=sha256:344cf1e3dab3be4b1fa08e449323d98a2a3f819ad20f4b22e77a0ede31f0faa1 \ - --hash=sha256:36341d06738a9f66c8287cf8b876d24b18db9bd8740fa0672c74e259ad408cff \ - --hash=sha256:365b10bb9417dd4498c0e3b128018c4a624dc11c7b97d8cc54effe3b096f4c38 \ - --hash=sha256:3a5cbdcddad0af3da87cb16b60d23648bc3b51967eb07223e9fed77a82b457c4 \ - --hash=sha256:417423db963cb4be8bac3fc1204fe61610f6abeed1580a7a2cbb2fbda20f12af \ - --hash=sha256:42fc1f4677106188ad9a55562bbade416f8b55456f522430fadab3cef7cd4e60 \ - --hash=sha256:44ce27545b6efcf0fdbdceb31c9a5bdea9333e664cda58a7e674bb74608b3986 \ - --hash=sha256:472a8d7ded663e6162dafdf20015c486a7009483ca671cece7a9279b512fcb13 \ - --hash=sha256:47b94983da0c642de92ced1702c5b6c292a84bd3a8e1d1702ff923f183594717 \ - --hash=sha256:495c302af3aad1ca67420ddd5c7bd480c8867ad173528767d906428057a11f0e \ - --hash=sha256:4ceb838d4bd9dab43e06c363cab2eebf63846d6a4aeaea283bbdfd8f1a8ed58b \ - --hash=sha256:50480dcd74fa63b8e78235957d302d98d98d82ccbfac4c7e12108ba9ecbdba15 \ - --hash=sha256:518a48c2aab7ce596d3bf79d0e275661b846e86e4d0e7dec34712c30fe07f02a \ - --hash=sha256:559b38da23606e68681337ad74622c4dbba02254fc9cb4488a305dd5975c7eeb \ - --hash=sha256:578510d88c6229d735855e1f278aa305270438d36a05031dfaae5067cc8eb04d \ - --hash=sha256:597bd9c8419bc7c6af5604e55847789b69123bbe25d65cc6ad3012b4f3c98d8b \ - --hash=sha256:5a8eb7ed8d4198bccbd07058416eeec51686b498e784eda166395a23eb99138e \ - --hash=sha256:5c0dd1636633e7e6a0afe7bf6a51a14992b7f8e60de5789018ebbdfae55b040a \ - --hash=sha256:5cb1785d97b0c3d1d1a16bc1d710c4a0049daefc4935f3a8f31f827f4d3d2e7f \ - --hash=sha256:5d1f9575a12bed9e9eedd9a4972834b08c97a352bd17955ccdebfeca5913fa0a \ - --hash=sha256:5d8c41325b382c07799a3682c1c258469ea2ff97103c53717b7893862d0c98ce \ - --hash=sha256:5dae5f21afb91322f2ff791895ddd8889e5e947ff59f71b46041c8ce6db790bc \ - --hash=sha256:600fd103672b925fe62ed08e0d874ea34d692474df6f4bf7ebe148b30f89f39f \ - --hash=sha256:6408a7b064595afcab0a49393a413732a35788f2a5092fdc6266952ed67de586 \ - --hash=sha256:652a2c9ccfb556235b2b501a3a7cf3742148cd22e04b5625c5fe057ea3e3191f \ - --hash=sha256:665e1b916b043cef294bc54d47bf02d87e13f769bc4bc5fa225a24b3a6c5aca9 \ - --hash=sha256:691ab2ac363b8217f7d31b3497108fb1f50faab2f75dfb03284ec2f217e87bf8 \ - --hash=sha256:6c52f062424c523d6c4db85518774cc3d50f5539dd6eed32b8f6229b26f24d40 \ - --hash=sha256:6c6db3b84c87d48d0088943bf33440e0c42370b99b1c2a7989216f7b42eede60 \ - --hash=sha256:7311c0a0dcadb89b36b7025dfd8326ecfa36964e29913074d47382706e516a7c \ - --hash=sha256:7aac39bcf8d4770d089588a2e1dd111cbaa42df5a94be3114222057d68336bd0 \ - --hash=sha256:7b03048319bfc6170e93bd60728a1af51d3dd7704935feb228c4d4faab35d334 \ - --hash=sha256:7e7976bf1910a8116b523b9f9f58bf410f3e8aa330cd9a2bb2953f9266ab49af \ - --hash=sha256:8089c852a56c2966cf18835db62d9b34fef7ba74c726ad943928d494fa7f4735 \ - --hash=sha256:86172b0831b82ce4f7877f280055892b31179e1576aa00d0df3bb1bbf8c3e524 \ - --hash=sha256:89b54027a766529136a06cfebeecb3a04900397a3590fd252160b888479517bf \ - --hash=sha256:89c7e895002bbe49cdc5426150377cbbc04767d7547ed145473f496dfa40408b \ - --hash=sha256:8b7e5304e34942bf62e15184219a7b5ad4ff7f3bb5cca4d984f37df1a0e1aee2 \ - --hash=sha256:8fd420ef0c52c88b5a035a0886f367748c72147b2b8f384c9d12656678dfdfa9 \ - --hash=sha256:98edb152429ab62a1818039744d8fbb3ccab98a7c29fc3d5fcef158f3f1f68b7 \ - --hash=sha256:99c1506ea77c11531d75e3a412832a13a71c7ebc8192ab9e4b2e355555920e3e \ - --hash=sha256:9ad8fa5937ab05218e2b6a4cff30295ad35afd2f83ac592e68c0d871bb0fdbc4 \ - --hash=sha256:9f51079765661884a486727f0729d29054242f74b46186026582b4e4769918e4 \ - --hash=sha256:a003d7422449f6d1e3a34e3dd4110c22148336918ddbfc6a32581cd54b2e0b2b \ - --hash=sha256:a0b1cd6232e2b618adcc54d9882e4e662a089d5768cd188f7c245b4c8c44a397 \ - --hash=sha256:a285e3eb7a5a45a2ff504e31f4a8d1b12ef62e84e5411c6804a42197c1cf586c \ - --hash=sha256:a37691702ed687799de29a518d63d4682d9016932db66d4e90c345831b02fb4e \ - --hash=sha256:a550ae29b95c6dc13cf69e2c9dc5747f814c54eeb2e32d683e5e93af56caa029 \ - --hash=sha256:ab174cd7d29a62dd139c44bf74b698039328f45cb03b4596c43473a46656b2f3 \ - --hash=sha256:ab323b787d6e18b3d91a72fc99b1a2c28651e4358749842b8f8dfacd28ef2052 \ - --hash=sha256:adebb5bee0f0af4909c30db0d890c773d1a92ffe83da908e2e9e720f8edf3984 \ - --hash=sha256:aee2810642b2898bb187ced9b349e95d2a7272930796e022efaf12e99dccd293 \ - --hash=sha256:af9a332e572978f0218686636610555ae3defd1633597be015ed50289a03c523 \ - --hash=sha256:b574c51cf7d5d62e9be37ba446224b59a2da26dc4c1bb2ecbe936a4fb1a7cb7f \ - --hash=sha256:b66e95d05ba806247aaa1561f080abc7975daf715c30780ff92a20e4ec546e1b \ - --hash=sha256:b81b5e3511211631b3f672a595e3221252c90af017e399056d0faabb9538aa80 \ - --hash=sha256:b957b71c6b2387610f556a7eb0828afbe40b4a98036fc0d2acfa5a44a0c2036f \ - --hash=sha256:bb66b7cc26f50977108790e2456b7921e773f23db5630261102233eb355a3b79 \ - --hash=sha256:c6008de247150668a705a6338156efb92334113421ceecf7438a12c9a12dab23 \ - --hash=sha256:c7697918b5be27424e9ce568193efd13d925c4481dd364e43f5dff72d33e10f8 \ - --hash=sha256:cb9bb857b2d057c6dfc72ac5f3b44836924ba15721882ef103cecb40d002d80e \ - --hash=sha256:cc7d296b5ea4d29e6570dabeaed58d31c3fea35a633a69679fb03d7664f43fb3 \ - --hash=sha256:d242e8ac078781f1de88bf823d70c1a9b3c7950a44cdf4b7c012e22ccbcd8e4e \ - --hash=sha256:d2912fd8114fc5545aa3a4b5576512f64c55a03f3ebcca4c10194d593d43ea36 \ - --hash=sha256:d470ab1178551dd17fdba0fef463359c41aaa613cdcd7ff8373f54be629f9f8f \ - --hash=sha256:d4ce8e329c93845720cd2014659ca67eac35f6433fd3050393d85f3ecef0dad5 \ - --hash=sha256:d6e4571eedf43af33d0fc233a382a76e849badbccdf1ac438841308652a08e1f \ - --hash=sha256:e65498daf4b583091ccbb2556c7000abf0f3349fcd57ef7adc9a84a394ed29f6 \ - --hash=sha256:e879bb6cd5c73848ef3b2b48b8af9ff08c5b71ecda8048b7dd22d8a33f60be32 \ - --hash=sha256:e9e8064fb1cc019296958595f6db671fba95209e3ceb0c4734c9baf97de04b20 \ - --hash=sha256:f7ed2c6543bad5a7d5530eb9e78c53132f93dfa44a28492db88b41cdab885202 \ - --hash=sha256:f95c00d5d6700b2b890479664a06e754974848afaae5e21beb4d83c106923fd0 \ - --hash=sha256:f975aa7ef9684ce7e2c18a3aa8f8e2106ce1e46b94ab713d156b2898811651d3 \ - --hash=sha256:fbfa2a7c10cc2623f412753cddf391c7f971c52ca40a3f65dc5039b2939e8563 \ - --hash=sha256:fc354a04072b765eccf2204f588a7a532c9511e8b9c7f900e1b64e3e33487090 \ - --hash=sha256:fc44ef1f3de4f45b50ccf9136999d71abb99dca7706bc75d222ed350b9fd2289 +pillow==12.2.0 \ + --hash=sha256:00a2865911330191c0b818c59103b58a5e697cae67042366970a6b6f1b20b7f9 \ + --hash=sha256:01afa7cf67f74f09523699b4e88c73fb55c13346d212a59a2db1f86b0a63e8c5 \ + --hash=sha256:03e7e372d5240cc23e9f07deca4d775c0817bffc641b01e9c3af208dbd300987 \ + --hash=sha256:03f6fab9219220f041c74aeaa2939ff0062bd5c364ba9ce037197f4c6d498cd9 \ + --hash=sha256:042db20a421b9bafecc4b84a8b6e444686bd9d836c7fd24542db3e7df7baad9b \ + --hash=sha256:0538bd5e05efec03ae613fd89c4ce0368ecd2ba239cc25b9f9be7ed426b0af1f \ + --hash=sha256:0a34329707af4f73cf1782a36cd2289c0368880654a2c11f027bcee9052d35dd \ + --hash=sha256:0c838a5125cee37e68edec915651521191cef1e6aa336b855f495766e77a366e \ + --hash=sha256:144748b3af2d1b358d41286056d0003f47cb339b8c43a9ea42f5fea4d8c66b6e \ + --hash=sha256:1610dd6c61621ae1cf811bef44d77e149ce3f7b95afe66a4512f8c59f25d9ebe \ + --hash=sha256:1e1757442ed87f4912397c6d35a0db6a7b52592156014706f17658ff58bbf795 \ + --hash=sha256:22db17c68434de69d8ecfc2fe821569195c0c373b25cccb9cbdacf2c6e53c601 \ + --hash=sha256:25373b66e0dd5905ed63fa3cae13c82fbddf3079f2c8bf15c6fb6a35586324c1 \ + --hash=sha256:2bb4a8d594eacdfc59d9e5ad972aa8afdd48d584ffd5f13a937a664c3e7db0ed \ + --hash=sha256:2c727a6d53cb0018aadd8018c2b938376af27914a68a492f59dfcaca650d5eea \ + --hash=sha256:2d192a155bbcec180f8564f693e6fd9bccff5a7af9b32e2e4bf8c9c69dbad6b5 \ + --hash=sha256:2e589959f10d9824d39b350472b92f0ce3b443c0a3442ebf41c40cb8361c5b97 \ + --hash=sha256:2e5a76d03a6c6dcef67edabda7a52494afa4035021a79c8558e14af25313d453 \ + --hash=sha256:325ca0528c6788d2a6c3d40e3568639398137346c3d6e66bb61db96b96511c98 \ + --hash=sha256:34c0d99ecccea270c04882cb3b86e7b57296079c9a4aff88cb3b33563d95afaa \ + --hash=sha256:390ede346628ccc626e5730107cde16c42d3836b89662a115a921f28440e6a3b \ + --hash=sha256:394167b21da716608eac917c60aa9b969421b5dcbbe02ae7f013e7b85811c69d \ + --hash=sha256:3997232e10d2920a68d25191392e3a4487d8183039e1c74c2297f00ed1c50705 \ + --hash=sha256:3adc9215e8be0448ed6e814966ecf3d9952f0ea40eb14e89a102b87f450660d8 \ + --hash=sha256:3e080565d8d7c671db5802eedfb438e5565ffa40115216eabb8cd52d0ecce024 \ + --hash=sha256:4a6c9fa44005fa37a91ebfc95d081e8079757d2e904b27103f4f5fa6f0bf78c0 \ + --hash=sha256:4bfd07bc812fbd20395212969e41931001fd59eb55a60658b0e5710872e95286 \ + --hash=sha256:4e6c62e9d237e9b65fac06857d511e90d8461a32adcc1b9065ea0c0fa3a28150 \ + --hash=sha256:50d8520da2a6ce0af445fa6d648c4273c3eeefbc32d7ce049f22e8b5c3daecc2 \ + --hash=sha256:51c4167c34b0d8ba05b547a3bb23578d0ba17b80a5593f93bd8ecb123dd336a3 \ + --hash=sha256:56a3f9c60a13133a98ecff6197af34d7824de9b7b38c3654861a725c970c197b \ + --hash=sha256:56b25336f502b6ed02e889f4ece894a72612fe885889a6e8c4c80239ff6e5f5f \ + --hash=sha256:57850958fe9c751670e49b2cecf6294acc99e562531f4bd317fa5ddee2068463 \ + --hash=sha256:58f62cc0f00fd29e64b29f4fd923ffdb3859c9f9e6105bfc37ba1d08994e8940 \ + --hash=sha256:5c0a9f29ca8e79f09de89293f82fc9b0270bb4af1d58bc98f540cc4aedf03166 \ + --hash=sha256:5cdfebd752ec52bf5bb4e35d9c64b40826bc5b40a13df7c3cda20a2c03a0f5ed \ + --hash=sha256:5d04bfa02cc2d23b497d1e90a0f927070043f6cbf303e738300532379a4b4e0f \ + --hash=sha256:5d2fd0fa6b5d9d1de415060363433f28da8b1526c1c129020435e186794b3795 \ + --hash=sha256:62f5409336adb0663b7caa0da5c7d9e7bdbaae9ce761d34669420c2a801b2780 \ + --hash=sha256:632ff19b2778e43162304d50da0181ce24ac5bb8180122cbe1bf4673428328c7 \ + --hash=sha256:6562ace0d3fb5f20ed7290f1f929cae41b25ae29528f2af1722966a0a02e2aa1 \ + --hash=sha256:673aa32138f3e7531ccdbca7b3901dba9b70940a19ccecc6a37c77d5fdeb05b5 \ + --hash=sha256:6a6e67ea2e6feda684ed370f9a1c52e7a243631c025ba42149a2cc5934dec295 \ + --hash=sha256:6a9adfc6d24b10f89588096364cc726174118c62130c817c2837c60cf08a392b \ + --hash=sha256:6bb77b2dcb06b20f9f4b4a8454caa581cd4dd0643a08bacf821216a16d9c8354 \ + --hash=sha256:6e6b2a0c538fc200b38ff9eb6628228b77908c319a005815f2dde585a0664b60 \ + --hash=sha256:71cde9a1e1551df7d34a25462fc60325e8a11a82cc2e2f54578e5e9a1e153d65 \ + --hash=sha256:7371b48c4fa448d20d2714c9a1f775a81155050d383333e0a6c15b1123dda005 \ + --hash=sha256:766cef22385fa1091258ad7e6216792b156dc16d8d3fa607e7545b2b72061f1c \ + --hash=sha256:7b14cc0106cd9aecda615dd6903840a058b4700fcb817687d0ee4fc8b6e389be \ + --hash=sha256:7f84204dee22a783350679a0333981df803dac21a0190d706a50475e361c93f5 \ + --hash=sha256:8023abc91fba39036dbce14a7d6535632f99c0b857807cbbbf21ecc9f4717f06 \ + --hash=sha256:80b2da48193b2f33ed0c32c38140f9d3186583ce7d516526d462645fd98660ae \ + --hash=sha256:8297651f5b5679c19968abefd6bb84d95fe30ef712eb1b2d9b2d31ca61267f4c \ + --hash=sha256:88d387ff40b3ff7c274947ed3125dedf5262ec6919d83946753b5f3d7c67ea4c \ + --hash=sha256:88ddbc66737e277852913bd1e07c150cc7bb124539f94c4e2df5344494e0a612 \ + --hash=sha256:8bd7903a5f2a4545f6fd5935c90058b89d30045568985a71c79f5fd6edf9b91e \ + --hash=sha256:8be29e59487a79f173507c30ddf57e733a357f67881430449bb32614075a40ab \ + --hash=sha256:8c984051042858021a54926eb597d6ee3012393ce9c181814115df4c60b9a808 \ + --hash=sha256:8cbeb542b2ebc6fcdacabf8aca8c1a97c9b3ad3927d46b8723f9d4f033288a0f \ + --hash=sha256:8e9c4f5b3c546fa3458a29ab22646c1c6c787ea8f5ef51300e5a60300736905e \ + --hash=sha256:90e6f81de50ad6b534cab6e5aef77ff6e37722b2f5d908686f4a5c9eba17a909 \ + --hash=sha256:975385f4776fafde056abb318f612ef6285b10a1f12b8570f3647ad0d74b48ec \ + --hash=sha256:9a8a34cc89c67a65ea7437ce257cea81a9dad65b29805f3ecee8c8fe8ff25ffe \ + --hash=sha256:9aba9a17b623ef750a4d11b742cbafffeb48a869821252b30ee21b5e91392c50 \ + --hash=sha256:9f08483a632889536b8139663db60f6724bfcb443c96f1b18855860d7d5c0fd4 \ + --hash=sha256:a4e8f36e677d3336f35089648c8955c51c6d386a13cf6ee9c189c5f5bd713a9f \ + --hash=sha256:a52edc8bfff4429aaabdf4d9ee0daadbbf8562364f940937b941f87a4290f5ff \ + --hash=sha256:a830b1a40919539d07806aa58e1b114df53ddd43213d9c8b75847eee6c0182b5 \ + --hash=sha256:aa88ccfe4e32d362816319ed727a004423aab09c5cea43c01a4b435643fa34eb \ + --hash=sha256:af73337013e0b3b46f175e79492d96845b16126ddf79c438d7ea7ff27783a414 \ + --hash=sha256:b1c1fbd8a5a1af3412a0810d060a78b5136ec0836c8a4ef9aa11807f2a22f4e1 \ + --hash=sha256:b85f66ae9eb53e860a873b858b789217ba505e5e405a24b85c0464822fe88032 \ + --hash=sha256:b86024e52a1b269467a802258c25521e6d742349d760728092e1bc2d135b4d76 \ + --hash=sha256:bd9c0c7a0c681a347b3194c500cb1e6ca9cab053ea4d82a5cf45b6b754560136 \ + --hash=sha256:bfa9c230d2fe991bed5318a5f119bd6780cda2915cca595393649fc118ab895e \ + --hash=sha256:d362d1878f00c142b7e1a16e6e5e780f02be8195123f164edf7eddd911eefe7c \ + --hash=sha256:d5d38f1411c0ed9f97bcb49b7bd59b6b7c314e0e27420e34d99d844b9ce3b6f3 \ + --hash=sha256:dac8d77255a37e81a2efcbd1fc05f1c15ee82200e6c240d7e127e25e365c39ea \ + --hash=sha256:dd025009355c926a84a612fecf58bb315a3f6814b17ead51a8e48d3823d9087f \ + --hash=sha256:deede7c263feb25dba4e82ea23058a235dcc2fe1f6021025dc71f2b618e26104 \ + --hash=sha256:e74473c875d78b8e9d5da2a70f7099549f9eb37ded4e2f6a463e60125bccd176 \ + --hash=sha256:ee3120ae9dff32f121610bb08e4313be87e03efeadfc6c0d18f89127e24d0c24 \ + --hash=sha256:eedf4b74eda2b5a4b2b2fb4c006d6295df3bf29e459e198c90ea48e130dc75c3 \ + --hash=sha256:efd8c21c98c5cc60653bcb311bef2ce0401642b7ce9d09e03a7da87c878289d4 \ + --hash=sha256:f1c943e96e85df3d3478f7b691f229887e143f81fedab9b20205349ab04d73ed \ + --hash=sha256:f278f034eb75b4e8a13a54a876cc4a5ab39173d2cdd93a638e1b467fc545ac43 \ + --hash=sha256:f3f40b3c5a968281fd507d519e444c35f0ff171237f4fdde090dd60699458421 \ + --hash=sha256:f490f9368b6fc026f021db16d7ec2fbf7d89e2edb42e8ec09d2c60505f5729c7 \ + --hash=sha256:fb043ee2f06b41473269765c2feae53fc2e2fbf96e5e22ca94fb5ad677856f06 \ + --hash=sha256:fc3d34d4a8fbec3e88a79b92e5465e0f9b842b628675850d860b8bd300b159f5 # via # -r src/backend/requirements.in # django-stdimage @@ -1425,13 +1419,13 @@ pint==0.25.3 \ --hash=sha256:27eb25143bd5de9fcc4d5a4b484f16faf6b4615aa93ece6b3373a8c1a3c1b97d \ --hash=sha256:f8f5df6cf65314d74da1ade1bf96f8e3e4d0c41b51577ac53c49e7d44ca5acee # via -r src/backend/requirements.in -pip-licenses==5.5.1 \ - --hash=sha256:7df370e6e5024a3f7449abf8e4321ef868ba9a795698ad24ab6851f3e7fc65a7 \ - --hash=sha256:ed5e229a93760e529cfa7edaec6630b5a2cd3874c1bddb8019e5f18a723fdead +pip-licenses==5.5.5 \ + --hash=sha256:60750c006adf7a0910347b726e8ee9fee3bc8d2e7c8307a5c4ec0776c8e2a276 \ + --hash=sha256:f4c4c6d9e6a03612cf59f29f19dc8ab54904d82e055b8e191498f2279a224e14 # via -r src/backend/requirements.in -platformdirs==4.9.4 \ - --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ - --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 +platformdirs==4.9.6 \ + --hash=sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a \ + --hash=sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917 # via pint ppf-datamatrix==0.2 \ --hash=sha256:819be65eae444b760e178d5761853f78f8e5fca14fec2809b5e3369978fa9244 \ @@ -1523,9 +1517,9 @@ pynacl==1.6.2 \ --hash=sha256:d29bfe37e20e015a7d8b23cfc8bd6aa7909c92a1b8f41ee416bbb3e79ef182b2 \ --hash=sha256:fe9847ca47d287af41e82be1dd5e23023d3c31a951da134121ab02e42ac218c9 # via paramiko -pypdf==6.9.2 \ - --hash=sha256:662cf29bcb419a36a1365232449624ab40b7c2d0cfc28e54f42eeecd1fd7e844 \ - --hash=sha256:7f850faf2b0d4ab936582c05da32c52214c2b089d61a316627b5bfb5b0dab46c +pypdf==6.10.2 \ + --hash=sha256:7d09ce108eff6bf67465d461b6ef352dcb8d84f7a91befc02f904455c6eea11d \ + --hash=sha256:aa53be9826655b51c96741e5d7983ca224d898ac0a77896e64636810517624aa # via -r src/backend/requirements.in pyphen==0.17.2 \ --hash=sha256:3a07fb017cb2341e1d9ff31b8634efb1ae4dc4b130468c7c39dd3d32e7c3affd \ @@ -1546,9 +1540,9 @@ python-dotenv==1.2.2 \ --hash=sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a \ --hash=sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3 # via -r src/backend/requirements.in -python-fsutil==0.16.0 \ - --hash=sha256:a60e16bad77e3f00c3dca95433209c823bc45e0ae4158e52969002f3c7957a18 \ - --hash=sha256:dc957a3541215baa935f66f6f15ceb9a8b7f803919c3d99fa57c818fc545f288 +python-fsutil==0.16.1 \ + --hash=sha256:4cc78b9a1e64011cb4fdaeba531e457e649a6a9a560424e841426e47f3a153ad \ + --hash=sha256:bda20802a19f6dc1bd221f6d2a79e0cd2b2c6eaf2b7c353a385c749917047442 # via django-maintenance-mode python-ipware==3.0.0 \ --hash=sha256:9117b1c4dddcb5d5ca49e6a9617de2fc66aec2ef35394563ac4eecabdf58c062 \ @@ -1647,90 +1641,90 @@ qrcode[pil]==8.2 \ # via # -r src/backend/requirements.in # django-allauth -rapidfuzz==3.14.3 \ - --hash=sha256:010e12e2411a4854b0434f920e72b717c43f8ec48d57e7affe5c42ecfa05dd0e \ - --hash=sha256:02821366d928e68ddcb567fed8723dad7ea3a979fada6283e6914d5858674850 \ - --hash=sha256:07aa0b5d8863e3151e05026a28e0d924accf0a7a3b605da978f0359bb804df43 \ - --hash=sha256:0e38828d1381a0cceb8a4831212b2f673d46f5129a1897b0451c883eaf4a1747 \ - --hash=sha256:152555187360978119e98ce3e8263d70dd0c40c7541193fc302e9b7125cf8f58 \ - --hash=sha256:1704fc70d214294e554a2421b473779bcdeef715881c5e927dc0f11e1692a0ff \ - --hash=sha256:1b7ef2f4b8583a744338a18f12c69693c194fb6777c0e9ada98cd4d9e8f09d10 \ - --hash=sha256:1b86daa7419b5e8b180690efd1fdbac43ff19230803282521c5b5a9c83977655 \ - --hash=sha256:1d83b8b712fa37e06d59f29a4b49e2e9e8635e908fbc21552fe4d1163db9d2a1 \ - --hash=sha256:1e6eefec45625c634926a9fd46c9e4f31118ac8f3156fff9494422cee45207e6 \ - --hash=sha256:1ec0c8c0c3d4f97ced46b2e191e883f8c82dbbf6d5ebc1842366d7eff13cd5a6 \ - --hash=sha256:1f1925619627f8798f8c3a391d81071336942e5fe8467bc3c567f982e7ce2897 \ - --hash=sha256:1faa0f8f76ba75fd7b142c984947c280ef6558b5067af2ae9b8729b0a0f99ede \ - --hash=sha256:2491937177868bc4b1e469087601d53f925e8d270ccc21e07404b4b5814b7b5f \ - --hash=sha256:2dc37bc20272f388b8c3a4eba4febc6e77e50a8f450c472def4751e7678f55e4 \ - --hash=sha256:32eeafa3abce138bb725550c0e228fc7eaeec7059aa8093d9cbbec2b58c2371a \ - --hash=sha256:33a325ed0e8e1aa20c3e75f8ab057a7b248fdea7843c2a19ade0008906c14af0 \ - --hash=sha256:33da4bbaf44e9755b0ce192597f3bde7372fe2e381ab305f41b707a95ac57aa7 \ - --hash=sha256:37d3c653af15cd88592633e942f5407cb4c64184efab163c40fcebad05f25141 \ - --hash=sha256:3fecce764cf5a991ee2195a844196da840aba72029b2612f95ac68a8b74946bf \ - --hash=sha256:43d0305c36f504232f18ea04e55f2059bb89f169d3119c4ea96a0e15b59e2a91 \ - --hash=sha256:43e38c1305cffae8472572a0584d4ffc2f130865586a81038ca3965301f7c97c \ - --hash=sha256:442125473b247227d3f2de807a11da6c08ccf536572d1be943f8e262bae7e4ea \ - --hash=sha256:442cba39957a008dfc5bdef21a9c3f4379e30ffb4e41b8555dbaf4887eca9300 \ - --hash=sha256:489ce98a895c98cad284f0a47960c3e264c724cb4cfd47a1430fa091c0c25204 \ - --hash=sha256:4ad73afb688b36864a8d9b7344a9cf6da186c471e5790cbf541a635ee0f457f2 \ - --hash=sha256:4b39921df948388a863f0e267edf2c36302983459b021ab928d4b801cbe6a421 \ - --hash=sha256:4e49c9e992bc5fc873bd0fff7ef16a4405130ec42f2ce3d2b735ba5d3d4eb70f \ - --hash=sha256:52619d25a09546b8db078981ca88939d72caa6b8701edd8b22e16482a38e799f \ - --hash=sha256:54fa03062124e73086dae66a3451c553c1e20a39c077fd704dc7154092c34c63 \ - --hash=sha256:56fefb4382bb12250f164250240b9dd7772e41c5c8ae976fd598a32292449cc5 \ - --hash=sha256:576e4b9012a67e0bf54fccb69a7b6c94d4e86a9540a62f1a5144977359133583 \ - --hash=sha256:57f878330c8d361b2ce76cebb8e3e1dc827293b6abf404e67d53260d27b5d941 \ - --hash=sha256:5cfc3d57abd83c734d1714ec39c88a34dd69c85474918ebc21296f1e61eb5ca8 \ - --hash=sha256:656e52b054d5b5c2524169240e50cfa080b04b1c613c5f90a2465e84888d6f15 \ - --hash=sha256:685c93ea961d135893b5984a5a9851637d23767feabe414ec974f43babbd8226 \ - --hash=sha256:6a014ba09657abfcfeed64b7d09407acb29af436d7fc075b23a298a7e4a6b41c \ - --hash=sha256:6c5f545f454871e6af05753a0172849c82feaf0f521c5ca62ba09e1b382d6382 \ - --hash=sha256:6de00eb84c71476af7d3110cf25d8fe7c792d7f5fa86764ef0b4ca97e78ca3ed \ - --hash=sha256:73b07566bc7e010e7b5bd490fb04bb312e820970180df6b5655e9e6224c137db \ - --hash=sha256:769f31c60cd79420188fcdb3c823227fc4a6deb35cafec9d14045c7f6743acae \ - --hash=sha256:7ba009977601d8b0828bfac9a110b195b3e4e79b350dcfa48c11269a9f1918a0 \ - --hash=sha256:7ccbf68100c170e9a0581accbe9291850936711548c6688ce3bfb897b8c589ad \ - --hash=sha256:7cf174b52cb3ef5d49e45d0a1133b7e7d0ecf770ed01f97ae9962c5c91d97d23 \ - --hash=sha256:7d9af908c2f371bfb9c985bd134e295038e3031e666e4b2ade1e7cb7f5af2f1a \ - --hash=sha256:834d1e818005ed0d4ae38f6b87b86fad9b0a74085467ece0727d20e15077c094 \ - --hash=sha256:8383b6d0d92f6cd008f3c9216535be215a064b2cc890398a678b56e6d280cb63 \ - --hash=sha256:89acb8cbb52904f763e5ac238083b9fc193bed8d1f03c80568b20e4cef43a519 \ - --hash=sha256:948b00e8476a91f510dd1ec07272efc7d78c275d83b630455559671d4e33b678 \ - --hash=sha256:9ec02e62ae765a318d6de38df609c57fc6dacc65c0ed1fd489036834fd8a620c \ - --hash=sha256:a0a28add871425c2fe94358c6300bbeb0bc2ed828ca003420ac6825408f5a424 \ - --hash=sha256:a2135b138bcdcb4c3742d417f215ac2d8c2b87bde15b0feede231ae95f09ec41 \ - --hash=sha256:adb44d996fc610c7da8c5048775b21db60dd63b1548f078e95858c05c86876a3 \ - --hash=sha256:b5100fd6bcee4d27f28f4e0a1c6b5127bc8ba7c2a9959cad9eab0bf4a7ab3329 \ - --hash=sha256:b9fcd4d751a4fffa17aed1dde41647923c72c74af02459ad1222e3b0022da3a1 \ - --hash=sha256:beda6aa9bc44d1d81242e7b291b446be352d3451f8217fcb068fc2933927d53b \ - --hash=sha256:c5fb2d978a601820d2cfd111e2c221a9a7bfdf84b41a3ccbb96ceef29f2f1ac7 \ - --hash=sha256:c71ce6d4231e5ef2e33caa952bfe671cb9fd42e2afb11952df9fad41d5c821f9 \ - --hash=sha256:c7bd1816db05d6c5ffb3a4df0a2b7b56fb8c81ef584d08e37058afa217da91b1 \ - --hash=sha256:c7e40c0a0af02ad6e57e89f62bef8604f55a04ecae90b0ceeda591bbf5923317 \ - --hash=sha256:cc594bbcd3c62f647dfac66800f307beaee56b22aaba1c005e9c4c40ed733923 \ - --hash=sha256:cc65e72790ddfd310c2c8912b45106e3800fefe160b0c2ef4d6b6fec4e826457 \ - --hash=sha256:cec3c0da88562727dd5a5a364bd9efeb535400ff0bfb1443156dd139a1dd7b50 \ - --hash=sha256:cfe8df315ab4e6db4e1be72c5170f8e66021acde22cd2f9d04d2058a9fd8162e \ - --hash=sha256:d1fa009f8b1100e4880868137e7bf0501422898f7674f2adcd85d5a67f041296 \ - --hash=sha256:d7843a1abf0091773a530636fdd2a49a41bcae22f9910b86b4f903e76ddc82dc \ - --hash=sha256:da2a007434323904719158e50f3076a4dadb176ce43df28ed14610c773cc9825 \ - --hash=sha256:dbcb726064b12f356bf10fffdb6db4b6dce5390b23627c08652b3f6e49aa56ae \ - --hash=sha256:dc8c07801df5206b81ed6bd6c35cb520cf9b6c64b9b0d19d699f8633dc942897 \ - --hash=sha256:dea2d113e260a5da0c4003e0a5e9fdf24a9dc2bb9eaa43abd030a1e46ce7837d \ - --hash=sha256:dea97ac3ca18cd3ba8f3d04b5c1fe4aa60e58e8d9b7793d3bd595fdb04128d7a \ - --hash=sha256:dee362e7e79bae940a5e2b3f6d09c6554db6a4e301cc68343886c08be99844f1 \ - --hash=sha256:e195a77d06c03c98b3fc06b8a28576ba824392ce40de8c708f96ce04849a052e \ - --hash=sha256:e6b5e3036976f0fde888687d91be86d81f9ac5f7b02e218913c38285b756be6c \ - --hash=sha256:e6c31a4aa68cfa75d7eede8b0ed24b9e458447db604c2db53f358be9843d81d3 \ - --hash=sha256:e805e52322ae29aa945baf7168b6c898120fbc16d2b8f940b658a5e9e3999253 \ - --hash=sha256:ea188aa00e9bcae8c8411f006a5f2f06c4607a02f24eab0d8dc58566aa911f35 \ - --hash=sha256:ecd7453e02cf072258c3a6b8e930230d789d5d46cc849503729f9ce475d0e785 \ - --hash=sha256:ef6bf930b947bd0735c550683939a032090f1d688dfd8861d6b45307b96fd5c5 \ - --hash=sha256:f3d15d8527e2b293e38ce6e437631af0708df29eafd7c9fc48210854c94472f9 \ - --hash=sha256:f3eb0ff3b75d6fdccd40b55e7414bb859a1cda77c52762c9c82b85569f5088e7 \ - --hash=sha256:fa7c8f26f009f8c673fbfb443792f0cf8cf50c4e18121ff1e285b5e08a94fbdb \ - --hash=sha256:fce3152f94afcfd12f3dd8cf51e48fa606e3cb56719bccebe3b401f43d0714f9 +rapidfuzz==3.14.5 \ + --hash=sha256:0084b687b02b4e569b46d8d6d4ad25659528e6081cd6d067ca453a69035f07e4 \ + --hash=sha256:01550fe5f60fd176aa66b7611289d46dc4aa4b1b904874c7b6d1d54e581c5ec1 \ + --hash=sha256:0298d357e2bc59d572da4db0bc631009b6f8f6c9bc8c11e99a12b833f16b6575 \ + --hash=sha256:068b3e965ca9d9ee4debe40001ae7c3938ba646308afd33cf0c66618147db65c \ + --hash=sha256:071d96b957a33b9296b9284b6350a0fb6d030b154a04efd7c15e56b98b79a517 \ + --hash=sha256:09d6c9ba091854f07817055d795d604179c12a8f308ba4c7d56f3719dfea1646 \ + --hash=sha256:0d3378f471ef440473a396ce2f8e97ee12f89a78b495540e0a5617bbfe895638 \ + --hash=sha256:0ebd1a18e2e47bc0b292a07e6ed9c3642f8aaa672d12253885f599b50807a4f9 \ + --hash=sha256:0f23e37019ec07712d58976b1ab2b889f8649a7f7c2f626a2f34ea9139e79279 \ + --hash=sha256:11bfc2ed8fbe4ab86bd516fadefab126f90e6dcadffa761739fcb304707dfd35 \ + --hash=sha256:13cb79c23ef5516e4c4e3830877be8b19aa75203636be1163d690d37803f6504 \ + --hash=sha256:17a34330cd2a538c1ce5d400b61ba358c5b72c654b928ff87b362e88f8b864c7 \ + --hash=sha256:1a31cc6d7d03e7318a0974c038959c59e19c752b81115f2e9138b3331cd64d45 \ + --hash=sha256:1e910eebca9fd0eba245c0555e764597e8a0cccb673a92da2dc2397050725f48 \ + --hash=sha256:1e989f86113be66574113b9c7bdf4793f3f863d248e47d911b355e05ca6b6b10 \ + --hash=sha256:2e83cd2e25bb4edd97b689d9979d9c3acccdaaf26ceac08212ceece202febcfa \ + --hash=sha256:39ef8658aaf67d51667e7bdaf7096f432333377d8302ac43c70b5df8a4cf89b8 \ + --hash=sha256:3d50e5861872935fece391351cbb5ba21d1bced277cf5e1143d207a0a35f1925 \ + --hash=sha256:3e91dcd2549b8f8d843f98ba03a17e01f3d8b72ce942adbbb6761bc58ffce813 \ + --hash=sha256:419e4397a36e2665ec992d8d64c20ba4b2a42500c76ecadeca78a4f19cb9cc32 \ + --hash=sha256:440d30faaf682ca496170a7f0cc5453ec942e3e079f0fd802c9a7f938dfb50a3 \ + --hash=sha256:46b92a9970dcc34f0096901c792644094cab49554ac3547f35e3aebbdf0a3610 \ + --hash=sha256:478b59bb018a6780d73f33e38d0b3ec5e968a6c1ed42876b993dd456b7aa20e8 \ + --hash=sha256:48bee0b91bebfaec41e1081e351000659ab7570cc4598d617aa04d5bf827f9e6 \ + --hash=sha256:4900143d82071bdda533b00300c40b14b963ff826b3642cc463b6dd0f036585e \ + --hash=sha256:4a60f0057231188e3bd30216f7b4e0f279b11fa4ec818bb6c1d9f014d1562fbc \ + --hash=sha256:56227a61fd3d17b0cd9793132431f3a3d07c8654be96794ba9f89fe0fc8b2d09 \ + --hash=sha256:578e6051f6d5e6200c259b47a103cf06bb875ab5814d17333fc0b5c290b22f4c \ + --hash=sha256:593c00dac4e30231c35bf3b4f1da8ec0998762e9e94425586a5d636fcd57f9d0 \ + --hash=sha256:59b3dba758661a318995655435c6ab20a04ade79fa51e75bc8dc107cac8df280 \ + --hash=sha256:5ab449c9abd0d4e1f8145dce0798a4c822a1a1933d613c764a641bea88b8bdab \ + --hash=sha256:5dfa89d78f22cd773054caff44827b846161a29f2dcf7e78b8f90d086621e502 \ + --hash=sha256:649712823f3abcdc48427147a5384fac15623ba435d0013959b52e6462521397 \ + --hash=sha256:667f40fe9c81ad129b198d236881b00dd9e8314d9cc72d03c3e16bdfe5879051 \ + --hash=sha256:6737b35d5af7479c5bf9710f7b17edd9d2c43128d974d25fb4ea653e42c64609 \ + --hash=sha256:67f3f9d2b444268ab53e47d31bab89954888d23c04c6789f2c727e51fe4b1d13 \ + --hash=sha256:7092a216728f80c960bd6b3807275d1ee318b168986bd5dc523349581d4890b8 \ + --hash=sha256:738c96944d076deeaff70e92b65696ab4f7ecb8081d7791c5403a3257dfaf8ff \ + --hash=sha256:77eac0526899b3c3ad1454bb2b03cdb491d67358ec8ef0c9c48bd61b632b431d \ + --hash=sha256:7d5ca9c7832e6879a707296d1463685f7c243a27846227044504741640caec66 \ + --hash=sha256:7e580cb04ad849ae9b786fa21383c6b994b6e6c1444ad1cb9f22392759d72741 \ + --hash=sha256:8166efddea49fdbc61185559f47593239e4794fd7c9044dd5a789d1a90af852d \ + --hash=sha256:823b1b9d9230809d8edcc18872770764bfe8ef4357995e16744047c8ccf0e489 \ + --hash=sha256:88b7d31ff1cc5e9bc0e4406e6b1fa00b6d37163d50bb58091e9b976ff1129faa \ + --hash=sha256:8c90cdf8516d9057e502aa6003cea71cf5ec27cc44699ca52412b502a04761bb \ + --hash=sha256:8ce1d850b3c0178440efde9e884d98421b5e87ff925f364d6d79e23910d7593f \ + --hash=sha256:8f4a8f5cc84c7ad6bffa0e9947b33eb343ad66e6b53e94fe54378a5508c5ed53 \ + --hash=sha256:93d8da883a35116d6813432177f35e570db5b0a5e30ecb0cbd7cb39c815735df \ + --hash=sha256:95d937e74c1a7a1287dfb03b62a827be08ede10a155cf1af73bbf47f2b73ee6e \ + --hash=sha256:9669753caef7fdc6529f6adcc5883ed98d65976445d9322e7dbdb6b697feee13 \ + --hash=sha256:97131ab2be39043054ee28d99e09efe316e6d53449b7e962dfcf3c2de8b2b246 \ + --hash=sha256:97c6d85283629646fa87acc22c66b30ea9d4de7f6fdf887daa2e30fa041829b5 \ + --hash=sha256:9981d38a703b86f0e315a3cd229fd1906fe1d91c989ed121fb975b3c849f89f5 \ + --hash=sha256:9ad37a0be705b544af6296da8edddc260d10a8ae5462530fc9991f66498bb1f9 \ + --hash=sha256:a2ae6f53f99c9a0eca7a0afc5b4e45fc73bc1dd4ac74c00509031d76df80ed98 \ + --hash=sha256:aac0ad28c686a5e72b81668b906c030ee28050b244544b8af68e12fb32543895 \ + --hash=sha256:af3b859726cd3374287e405e14b9634563c078c5531a4f62375508addebddad1 \ + --hash=sha256:af6a90a4ed2a48fa1a2d17e9d824e6c7c950bea5bad0b707c77fd55751e6bfef \ + --hash=sha256:b002c7994cc9f2bc9d9856f0fbaee6e8072c983873846c92f25cefba5b2a925f \ + --hash=sha256:b486b5218808f6f4dc471b114b1054e63553db69705c97da0271f47bd706aedd \ + --hash=sha256:b9c6bd754d11f6e78ac54e3d86b4b11dc1ba2f13e5fc958899574532897f5a99 \ + --hash=sha256:ba10ac57884ce82112f7ed910b67e7fb6072d8ef2c06e30dc63c0f604a112e0e \ + --hash=sha256:bf5018938208d4597b2e679a4f8cff9fd252f1df53583130ae56281a21801b64 \ + --hash=sha256:c0919d1f89ddf91129906705723118ea09754171e4116f5a5dbc667c7bc9b261 \ + --hash=sha256:c5801a89604c65ab4cc9e91b23bc4076d0ca80efd8c976fb63843d7879a85d7f \ + --hash=sha256:c84af70bcf34e99aee894e46a0f1ac77f17d0ef828179c387407642e2466d28a \ + --hash=sha256:cb2829fedd672dd7107267189dabe2bbe07972801d636014417c6861eb89e358 \ + --hash=sha256:d45e06f60729e07d9b20c205f7e5cff90b6ef2584e852eecf46e045aea69627d \ + --hash=sha256:d7ca16637c0ede8243f84074044bd0b2335a0341421f8227c85756de2d18c819 \ + --hash=sha256:d8375e3da319593389727c3187ccaf3e0e84199accc530866b8e0f2b79af05e9 \ + --hash=sha256:dfa552338f51aec280f17b02d28bace1e162d1a84ccd80e3339a57f98aedb56b \ + --hash=sha256:dfef96543ced67d9513a422755db422ae1dc34dade0a1485e0b43e7342ed3ebf \ + --hash=sha256:e012177c8e8a8a0754ae0d6027d63042aa5ff036d9f40f07cb3466a6082e21b8 \ + --hash=sha256:e251126d48615e1f02b4a178f2cd0cd4f0332b8a019c01a2e10480f7552554b4 \ + --hash=sha256:e52da10236aa6212de71b9e170bace65b64b129c0dea7fc243d6c9ce976f5074 \ + --hash=sha256:eacb434410b8d9ca99a8d42352ef085cf423e3c76c1f0b86be2fcba3bff2952c \ + --hash=sha256:ebd8fd343bf8492a1e60bcb6dc99f90f74f65d98d8241a6b3e1fed225b76ecd6 \ + --hash=sha256:f0b2af76b7e7060c09e1a0dfa9410eb19369cbe6164509bff2ef94094b54d2b6 \ + --hash=sha256:f2073495a7f9b75e57e600747ac09510d67683fd64d3228e009740b7ef88f9fe \ + --hash=sha256:f4c1bca487a17fe4226b4ffb2d30e799d2b274d692cffa76bd0746f56235fca3 \ + --hash=sha256:f9fff308486bbd2c8c24f25e8e152c7594d3fe8db265a2d6a1ce24d58671127f \ + --hash=sha256:fbf1b8bb2695415b347f3727da1addca2acb82c9b97ac86bebf8b1bead1eb12d \ + --hash=sha256:feedf219672eef83ea6be6f3bb093bba396a8560fc75be85ba225f082903df0a # via -r src/backend/requirements.in redis==7.4.0 \ --hash=sha256:64a6ea7bf567ad43c964d2c30d82853f8df927c5c9017766c55a1d1ed95d18ad \ @@ -1742,9 +1736,9 @@ referencing==0.37.0 \ # via # jsonschema # jsonschema-specifications -requests==2.33.0 \ - --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ - --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 +requests==2.33.1 \ + --hash=sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517 \ + --hash=sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a # via # django-allauth # django-anymail @@ -1873,9 +1867,9 @@ s3transfer==0.16.0 \ --hash=sha256:18e25d66fed509e3868dc1572b3f427ff947dd2c56f844a5bf09481ad3f3b2fe \ --hash=sha256:8e990f13268025792229cd52fa10cb7163744bf56e719e0b9cb925ab79abf920 # via boto3 -sentry-sdk==2.56.0 \ - --hash=sha256:5afafb744ceb91d22f4cc650c6bd048ac6af5f7412dcc6c59305a2e36f4dbc02 \ - --hash=sha256:fdab72030b69625665b2eeb9738bdde748ad254e8073085a0ce95382678e8168 +sentry-sdk==2.57.0 \ + --hash=sha256:4be8d1e71c32fb27f79c577a337ac8912137bba4bcbc64a4ec1da4d6d8dc5199 \ + --hash=sha256:812c8bf5ff3d2f0e89c82f5ce80ab3a6423e102729c4706af7413fd1eb480585 # via # -r src/backend/requirements.in # django-q-sentry @@ -1934,9 +1928,9 @@ typing-extensions==4.15.0 \ # pint # py-moneyed # referencing -tzdata==2025.3 \ - --hash=sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 \ - --hash=sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7 +tzdata==2026.1 \ + --hash=sha256:4b1d2be7ac37ceafd7327b961aa3a54e467efbdb563a23655fbfe0d39cfc42a9 \ + --hash=sha256:67658a1903c75917309e753fdc349ac0efd8c27db7a0cb406a25be4840f87f98 # via icalendar uritemplate==4.2.0 \ --hash=sha256:480c2ed180878955863323eea31b0ede668795de182617fef9c6ca09e6ec9d0e \ diff --git a/src/frontend/CHANGELOG.md b/src/frontend/CHANGELOG.md index c3c4341132..f1c4f9ba47 100644 --- a/src/frontend/CHANGELOG.md +++ b/src/frontend/CHANGELOG.md @@ -2,6 +2,31 @@ This file contains historical changelog information for the InvenTree UI components library. +### 0.11.2 - April 2026 + +Exposes additional type definitions related to tables and filters: + +- TableFilterChoice +- TableFilterType +- TableFilter +- FilterSetState + +### 0.11.1 - April 2026 + +Fixes dependency issues for the `InvenTreeTable` component, which were introduced in `0.11.0`. This ensures that the component works correctly and does not cause issues with plugin builds. + +### 0.11.0 - April 2026 + +Adds the `InvenTreeTable` component, which provides plugins with a method of implementing an API-driven data table which is consistent with the rest of the InvenTree UI. This component supports features such as pagination, sorting, and filtering, and can be used to display data from the InvenTree API in a tabular format. + +### 0.10.1 - April 2026 + +Allows plugins to specify custom model rendering functions within the data import wizard, allowing import of data models not defined in the core InvenTree codebase. + +### 0.10.0 - April 2026 + +Exposes the `importer` object to the plugin context, allow plugins to initialize a data import session using the data importer wizard. + ### 0.9.0 - March 2026 Exposes the `useMonitorBackgroundTask` hook, which allows plugins to monitor the status of a background task and display notifications when the task is complete. This is useful for plugins that offload long-running tasks to the background and want to provide feedback to the user when the task is complete. diff --git a/src/frontend/src/components/Boundary.tsx b/src/frontend/lib/components/Boundary.tsx similarity index 100% rename from src/frontend/src/components/Boundary.tsx rename to src/frontend/lib/components/Boundary.tsx diff --git a/src/frontend/src/components/buttons/CopyButton.tsx b/src/frontend/lib/components/CopyButton.tsx similarity index 89% rename from src/frontend/src/components/buttons/CopyButton.tsx rename to src/frontend/lib/components/CopyButton.tsx index a43b4b3099..da72f82a26 100644 --- a/src/frontend/src/components/buttons/CopyButton.tsx +++ b/src/frontend/lib/components/CopyButton.tsx @@ -10,8 +10,7 @@ import { Text, Tooltip } from '@mantine/core'; - -import { InvenTreeIcon } from '../../functions/icons'; +import { IconCheck, IconCopy } from '@tabler/icons-react'; import type { JSX } from 'react'; @@ -62,11 +61,7 @@ export function CopyButton({ variant={copied ? 'transparent' : (variant ?? 'transparent')} size={size ?? 'sm'} > - {copied ? ( - - ) : ( - - )} + {copied ? : } {content} {label && ( diff --git a/src/frontend/src/tables/CopyableCell.tsx b/src/frontend/lib/components/CopyableCell.tsx similarity index 95% rename from src/frontend/src/tables/CopyableCell.tsx rename to src/frontend/lib/components/CopyableCell.tsx index e90d122296..eee9b0e26f 100644 --- a/src/frontend/src/tables/CopyableCell.tsx +++ b/src/frontend/lib/components/CopyableCell.tsx @@ -1,6 +1,6 @@ import { Group } from '@mantine/core'; import { useState } from 'react'; -import { CopyButton } from '../components/buttons/CopyButton'; +import { CopyButton } from './CopyButton'; /** * A wrapper component that adds a copy button to cell content on hover diff --git a/src/frontend/lib/components/InvenTreeTable.tsx b/src/frontend/lib/components/InvenTreeTable.tsx new file mode 100644 index 0000000000..298d0b994e --- /dev/null +++ b/src/frontend/lib/components/InvenTreeTable.tsx @@ -0,0 +1,63 @@ +import { Alert } from '@mantine/core'; +import { + INVENTREE_PLUGIN_VERSION, + type InvenTreePluginContext +} from '../types/Plugins'; +import type { + InvenTreeTableProps, + TableColumn, + TableState +} from '../types/Tables'; + +/** + * Wrapper function which allows plugins to render an InvenTree component instance directly, + * in a similar way to the standard InvenTreeTable component. + * + * Note: The InventreePluginContext "context" object must be provided when rendering the table + * + */ + +export default function InvenTreeTable({ + url, + tableState, + tableData, + columns, + props, + context +}: { + url?: string; + tableState: TableState; + tableData?: any[]; + columns: TableColumn[]; + props: InvenTreeTableProps; + context: InvenTreePluginContext; +}) { + if (!context?.tables?.renderTable) { + return ( + + { + 'The component cannot be rendered because the plugin context is missing the "renderTable" function.' + } +
+ { + 'This means that the InvenTree UI library version is incompatible with this plugin version.' + } +
+ Plugin Version: {INVENTREE_PLUGIN_VERSION} +
+ UI Version: {context?.version?.inventree || 'unknown'} +
+
+ ); + } + + return context?.tables.renderTable({ + url: url, + tableState: tableState, + tableData: tableData, + columns: columns, + props: props, + api: context.api, + navigate: context.navigate + }); +} diff --git a/src/frontend/src/tables/ColumnSelect.tsx b/src/frontend/lib/components/TableColumnSelect.tsx similarity index 100% rename from src/frontend/src/tables/ColumnSelect.tsx rename to src/frontend/lib/components/TableColumnSelect.tsx diff --git a/src/frontend/lib/enums/ApiEndpoints.tsx b/src/frontend/lib/enums/ApiEndpoints.tsx index e7adf3f0b8..8a1a80ad73 100644 --- a/src/frontend/lib/enums/ApiEndpoints.tsx +++ b/src/frontend/lib/enums/ApiEndpoints.tsx @@ -64,7 +64,7 @@ export enum ApiEndpoints { content_type_list = 'contenttype/', icons = 'icons/', selectionlist_list = 'selection/', - selectionlist_detail = 'selection/:id/', + selectionentry_list = 'selection/:id/entry/', // Barcode API endpoints barcode = 'barcode/', diff --git a/src/frontend/lib/enums/ModelInformation.tsx b/src/frontend/lib/enums/ModelInformation.tsx index 6f93a1ebeb..6db5b5672a 100644 --- a/src/frontend/lib/enums/ModelInformation.tsx +++ b/src/frontend/lib/enums/ModelInformation.tsx @@ -287,6 +287,13 @@ export const ModelInformationDict: ModelDict = { api_endpoint: ApiEndpoints.selectionlist_list, icon: 'list_details' }, + selectionentry: { + label: () => t`Selection Entry`, + label_multiple: () => t`Selection Entries`, + url_overview: '/settings/admin/part-parameters', + api_endpoint: ApiEndpoints.selectionentry_list, + icon: 'list_details' + }, error: { label: () => t`Error`, label_multiple: () => t`Errors`, diff --git a/src/frontend/lib/enums/ModelType.tsx b/src/frontend/lib/enums/ModelType.tsx index 57aa1b7205..ea85b542fc 100644 --- a/src/frontend/lib/enums/ModelType.tsx +++ b/src/frontend/lib/enums/ModelType.tsx @@ -35,5 +35,6 @@ export enum ModelType { pluginconfig = 'pluginconfig', contenttype = 'contenttype', selectionlist = 'selectionlist', + selectionentry = 'selectionentry', error = 'error' } diff --git a/src/frontend/lib/functions/Forms.tsx b/src/frontend/lib/functions/Forms.tsx new file mode 100644 index 0000000000..78ad55ce2e --- /dev/null +++ b/src/frontend/lib/functions/Forms.tsx @@ -0,0 +1,47 @@ +import type { ApiEndpoints } from '../enums/ApiEndpoints'; +import type { PathParams } from '../types/Core'; +import type { ApiFormFieldSet, ApiFormFieldType } from '../types/Forms'; +import { apiUrl } from './Api'; + +/** + * Construct an API url from the provided ApiFormProps object + */ +export function constructFormUrl( + url: ApiEndpoints | string, + pk?: string | number, + pathParams?: PathParams, + queryParams?: URLSearchParams +): string { + let formUrl = apiUrl(url, pk, pathParams); + + if (queryParams) { + formUrl += `?${queryParams.toString()}`; + } + + return formUrl; +} + +export type NestedDict = { [key: string]: string | number | NestedDict }; + +export function mapFields( + fields: ApiFormFieldSet, + fieldFunction: (path: string, value: ApiFormFieldType, key: string) => any, + _path?: string +): NestedDict { + const res: NestedDict = {}; + + for (const [k, v] of Object.entries(fields)) { + const path = _path ? `${_path}.${k}` : k; + let value: any; + + if (v.field_type === 'nested object' && v.children) { + value = mapFields(v.children, fieldFunction, path); + } else { + value = fieldFunction(path, v, k); + } + + if (value !== undefined) res[k] = value; + } + + return res; +} diff --git a/src/frontend/lib/functions/Notification.tsx b/src/frontend/lib/functions/Notification.tsx new file mode 100644 index 0000000000..8e16570e7c --- /dev/null +++ b/src/frontend/lib/functions/Notification.tsx @@ -0,0 +1,50 @@ +import { t } from '@lingui/core/macro'; +import { notifications } from '@mantine/notifications'; + +/** + * Show a notification that the feature is not yet implemented + */ +export function notYetImplemented() { + notifications.hide('not-implemented'); + + notifications.show({ + title: t`Not implemented`, + message: t`This feature is not yet implemented`, + color: 'red', + id: 'not-implemented' + }); +} + +/** + * Show a notification that the user does not have permission to perform the action + */ +export function permissionDenied() { + notifications.show({ + title: t`Permission Denied`, + message: t`You do not have permission to perform this action`, + color: 'red' + }); +} + +/** + * Display a notification on an invalid return code + */ +export function invalidResponse(returnCode: number) { + // TODO: Specific return code messages + notifications.show({ + title: t`Invalid Return Code`, + message: t`Server returned status ${returnCode}`, + color: 'red' + }); +} + +/** + * Display a notification on timeout + */ +export function showTimeoutNotification() { + notifications.show({ + title: t`Timeout`, + message: t`The request timed out`, + color: 'red' + }); +} diff --git a/src/frontend/src/functions/tables.tsx b/src/frontend/lib/functions/String.tsx similarity index 100% rename from src/frontend/src/functions/tables.tsx rename to src/frontend/lib/functions/String.tsx diff --git a/src/frontend/src/hooks/UseFilterSet.tsx b/src/frontend/lib/hooks/UseFilterSet.tsx similarity index 91% rename from src/frontend/src/hooks/UseFilterSet.tsx rename to src/frontend/lib/hooks/UseFilterSet.tsx index 9d0300cb46..80a7791f1e 100644 --- a/src/frontend/src/hooks/UseFilterSet.tsx +++ b/src/frontend/lib/hooks/UseFilterSet.tsx @@ -1,8 +1,8 @@ -import type { FilterSetState, TableFilter } from '@lib/types/Filters'; import { useLocalStorage } from '@mantine/hooks'; import { useCallback, useMemo } from 'react'; +import type { FilterSetState, TableFilter } from '../types/Filters'; -export function useFilterSet( +export default function useFilterSet( filterKey: string, initialFilters?: TableFilter[] ): FilterSetState { diff --git a/src/frontend/src/hooks/UseTable.tsx b/src/frontend/lib/hooks/UseTable.tsx similarity index 86% rename from src/frontend/src/hooks/UseTable.tsx rename to src/frontend/lib/hooks/UseTable.tsx index 49a2c50569..52bdd6afa4 100644 --- a/src/frontend/src/hooks/UseTable.tsx +++ b/src/frontend/lib/hooks/UseTable.tsx @@ -1,10 +1,9 @@ import { randomId } from '@mantine/hooks'; import { useCallback, useMemo, useState } from 'react'; -import { useSearchParams } from 'react-router-dom'; -import type { FilterSetState, TableFilter } from '@lib/types/Filters'; -import type { TableState } from '@lib/types/Tables'; -import { useFilterSet } from './UseFilterSet'; +import type { FilterSetState, TableFilter } from '../types/Filters'; +import type { TableState } from '../types/Tables'; +import useFilterSet from './UseFilterSet'; export type TableStateExtraProps = { idAccessor?: string; @@ -17,7 +16,7 @@ export type TableStateExtraProps = { * Refer to the TableState type definition for more information. */ -export function useTable( +export default function useTable( tableName: string, tableProps: TableStateExtraProps = { idAccessor: 'pk', @@ -29,13 +28,6 @@ export function useTable( return `${tableName.replaceAll('-', '')}-${randomId()}`; } - // Extract URL query parameters (e.g. ?active=true&overdue=false) - const [queryFilters, setQueryFilters] = useSearchParams(); - - const clearQueryFilters = useCallback(() => { - setQueryFilters({}); - }, []); - const [tableKey, setTableKey] = useState(generateTableName()); // Callback used to refresh (reload) the table @@ -133,9 +125,6 @@ export function useTable( isLoading, setIsLoading, filterSet, - queryFilters, - setQueryFilters, - clearQueryFilters, expandedRecords, setExpandedRecords, isRowExpanded, diff --git a/src/frontend/lib/index.ts b/src/frontend/lib/index.ts index f9812e6df7..8bf7103acd 100644 --- a/src/frontend/lib/index.ts +++ b/src/frontend/lib/index.ts @@ -15,10 +15,27 @@ export { UserRoles, UserPermissions } from './enums/Roles'; export type { InvenTreePluginContext, InvenTreeFormsContext, + InvenTreeTablesContext, + ImporterDrawerContext, PluginVersion, StockAdjustmentFormsContext } from './types/Plugins'; -export type { RowAction, RowViewProps } from './types/Tables'; + +export type { + RowAction, + RowViewProps, + TableColumn, + TableColumnProps, + InvenTreeTableProps, + InvenTreeTableRenderProps +} from './types/Tables'; + +export type { + TableFilterChoice, + TableFilterType, + TableFilter, + FilterSetState +} from './types/Filters'; export type { ApiFormFieldChoice, @@ -42,6 +59,14 @@ export { getDetailUrl, navigateToLink } from './functions/Navigation'; + +export { + notYetImplemented, + permissionDenied, + invalidResponse, + showTimeoutNotification +} from './functions/Notification'; + export { checkPluginVersion, initPlugin @@ -53,16 +78,32 @@ export { formatFileSize } from './functions/Formatting'; +export { + constructFormUrl, + mapFields, + type NestedDict +} from './functions/Forms'; + +export { + shortenString, + hashString +} from './functions/String'; + // Common UI components export { ActionButton, type ActionButtonProps } from './components/ActionButton'; export { AddItemButton } from './components/AddItemButton'; +export { Boundary, DefaultFallback } from './components/Boundary'; export { ButtonMenu } from './components/ButtonMenu'; +export { CopyButton } from './components/CopyButton'; +export { CopyableCell } from './components/CopyableCell'; export { ProgressBar } from './components/ProgressBar'; export { PassFailButton, YesNoButton } from './components/YesNoButton'; export { SearchInput } from './components/SearchInput'; +export { TableColumnSelect } from './components/TableColumnSelect'; +export { default as InvenTreeTable } from './components/InvenTreeTable'; export { RowViewAction, RowDuplicateAction, @@ -77,7 +118,21 @@ export { default as useMonitorDataOutput, type MonitorDataOutputProps } from './hooks/MonitorDataOutput'; + export { default as useMonitorBackgroundTask, type MonitorBackgroundTaskProps } from './hooks/MonitorBackgroundTask'; + +export { default as useFilterSet } from './hooks/UseFilterSet'; + +export { + default as useTable, + type TableStateExtraProps +} from './hooks/UseTable'; + +// State management +export { + type StoredTableStateProps, + useStoredTableState +} from './states/StoredTableState'; diff --git a/src/frontend/src/states/StoredTableState.tsx b/src/frontend/lib/states/StoredTableState.tsx similarity index 98% rename from src/frontend/src/states/StoredTableState.tsx rename to src/frontend/lib/states/StoredTableState.tsx index 7d9519dc09..f0e6c40e09 100644 --- a/src/frontend/src/states/StoredTableState.tsx +++ b/src/frontend/lib/states/StoredTableState.tsx @@ -13,7 +13,7 @@ const DEFAULT_PAGE_SIZE: number = 25; * - columnNames: An object mapping table keys to arrays of column names. * - sorting: An object mapping table keys to sorting configurations. */ -interface StoredTableStateProps { +export interface StoredTableStateProps { pageSize: number; setPageSize: (size: number) => void; tableSorting: Record; diff --git a/src/frontend/lib/types/Forms.tsx b/src/frontend/lib/types/Forms.tsx index 42ba36acfd..de364d68f8 100644 --- a/src/frontend/lib/types/Forms.tsx +++ b/src/frontend/lib/types/Forms.tsx @@ -68,6 +68,7 @@ export type ApiFormFieldHeader = { * @param adjustValue : Callback function to adjust the value of the field before it is sent to the API * @param addRow : Callback function to add a new row to a table field * @param onKeyDown : Callback function to get which key was pressed in the form to handle submission on enter + * @param singleFetchFunction : Optional function to fetch a single value for this field (used for fetching the initial value when editing an existing object) */ export type ApiFormFieldType = { label?: string; @@ -113,6 +114,7 @@ export type ApiFormFieldType = { placeholderAutofill?: boolean; placeholderWarningCompare?: string | number; placeholderWarning?: string; + addCreateFields?: ApiFormFieldSet; description?: string; preFieldContent?: JSX.Element; postFieldContent?: JSX.Element; @@ -126,6 +128,7 @@ export type ApiFormFieldType = { addRow?: () => any; headers?: ApiFormFieldHeader[]; depends_on?: string[]; + singleFetchFunction?: (value: any) => Promise | null; }; export type ApiFormFieldSet = Record; diff --git a/src/frontend/lib/types/Plugins.tsx b/src/frontend/lib/types/Plugins.tsx index cc10083b6e..575cf9f3c5 100644 --- a/src/frontend/lib/types/Plugins.tsx +++ b/src/frontend/lib/types/Plugins.tsx @@ -13,6 +13,7 @@ import type { import type { UseModalReturn } from './Modals'; import type { RenderInstanceProps } from './Rendering'; import type { SettingsStateProps } from './Settings'; +import type { InvenTreeTableRenderProps } from './Tables'; import type { UserStateProps } from './User'; export interface PluginProps { @@ -48,24 +49,39 @@ export type InvenTreeFormsContext = { stockActions: StockAdjustmentFormsContext; }; +export type InvenTreeTablesContext> = { + renderTable: (props: InvenTreeTableRenderProps) => React.ReactNode; +}; + +export type ImporterDrawerContext = { + open: (sessionId: number, options?: { onClose?: () => void }) => void; + close: () => void; + isOpen: () => boolean; + sessionId: () => number | null; +}; + /** * A set of properties which are passed to a plugin, * for rendering an element in the user interface. * * @param version - The version of the running InvenTree software stack * @param api - The Axios API instance (see ../states/ApiState.tsx) + * @param queryClient - The Tanstack QueryClient instance (see ../states/QueryState.tsx) * @param user - The current user instance (see ../states/UserState.tsx) * @param userSettings - The current user settings (see ../states/SettingsState.tsx) * @param globalSettings - The global settings (see ../states/SettingsState.tsx) - * @param navigate - The navigation function (see react-router-dom) - * @param theme - The current Mantine theme - * @param colorScheme - The current Mantine color scheme (e.g. 'light' / 'dark') + * @param modelInformation - A dictionary of available model information + * @param renderInstance - A component function for rendering a model instance * @param host - The current host URL * @param i18n - The i18n instance for translations (from @lingui/core) * @param locale - The current locale string (e.g. 'en' / 'de') + * @param navigate - The navigation function (see react-router-dom) + * @param theme - The current Mantine theme + * @param colorScheme - The current Mantine color scheme (e.g. 'light' / 'dark') + * @param forms - A set of functions for opening various API forms (see ../components/Forms.tsx) + * @param tables - A set of functions for rendering API tables + * @param importer - A set of functions for controlling the global importer drawer (see ../components/importer/GlobalImporterDrawer.tsx) * @param model - The model type associated with the rendered component (if applicable) - * @param modelInformation - A dictionary of available model information - * @param renderInstance - A component function for rendering a model instance * @param id - The ID (primary key) of the model instance for the plugin (if applicable) * @param instance - The model instance data (if available) * @param reloadContent - A function which can be called to reload the plugin content @@ -86,8 +102,10 @@ export type InvenTreePluginContext = { locale: string; navigate: NavigateFunction; theme: MantineTheme; - forms: InvenTreeFormsContext; colorScheme: MantineColorScheme; + forms: InvenTreeFormsContext; + tables: InvenTreeTablesContext; + importer: ImporterDrawerContext; model?: ModelType | string; id?: string | number | null; instance?: any; diff --git a/src/frontend/lib/types/Tables.tsx b/src/frontend/lib/types/Tables.tsx index 99f02ce06d..ffb7186e06 100644 --- a/src/frontend/lib/types/Tables.tsx +++ b/src/frontend/lib/types/Tables.tsx @@ -1,10 +1,12 @@ import type { MantineStyleProp } from '@mantine/core'; +import type { AxiosInstance } from 'axios'; +import type { ShowContextMenuFunction } from 'mantine-contextmenu'; import type { DataTableCellClickHandler, DataTableRowExpansionProps } from 'mantine-datatable'; import type { ReactNode } from 'react'; -import type { NavigateFunction, SetURLSearchParams } from 'react-router-dom'; +import type { NavigateFunction } from 'react-router-dom'; import type { ModelType } from '../enums/ModelType'; import type { FilterSetState, TableFilter } from './Filters'; import type { ApiFormFieldType } from './Forms'; @@ -17,9 +19,6 @@ import type { ApiFormFieldType } from './Forms'; * isLoading: A boolean flag to indicate if the table is currently loading data * setIsLoading: A function to set the isLoading flag * filterSet: A group of active filters - * queryFilters: A map of query filters (e.g. ?active=true&overdue=false) passed in the URL - * setQueryFilters: A function to set the query filters - * clearQueryFilters: A function to clear all query filters * expandedRecords: An array of expanded records (rows) in the table * setExpandedRecords: A function to set the expanded records * isRowExpanded: A function to determine if a record is expanded @@ -49,9 +48,6 @@ export type TableState = { isLoading: boolean; setIsLoading: (value: boolean) => void; filterSet: FilterSetState; - queryFilters: URLSearchParams; - setQueryFilters: SetURLSearchParams; - clearQueryFilters: () => void; expandedRecords: any[]; setExpandedRecords: (records: any[]) => void; isRowExpanded: (pk: number) => boolean; @@ -219,3 +215,18 @@ export type InvenTreeTableProps = { minHeight?: number; noHeader?: boolean; }; + +export type InvenTreeTableRenderProps> = { + url?: string; + tableState: TableState; + tableData?: T[]; + columns: TableColumn[]; + props: InvenTreeTableProps; + api: AxiosInstance; + navigate: NavigateFunction; + + // The following attributes are for internal use only (plugins should not use these directly) + showContextMenu?: ShowContextMenuFunction; + searchParams?: URLSearchParams; + setSearchParams?: (params: URLSearchParams) => void; +}; diff --git a/src/frontend/package.json b/src/frontend/package.json index 39f635c9a9..1f8f58a8d1 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -1,7 +1,7 @@ { "name": "@inventreedb/ui", "description": "UI components for the InvenTree project", - "version": "0.9.0", + "version": "0.11.2", "private": false, "type": "module", "license": "MIT", @@ -130,7 +130,7 @@ "rollup": "^4.59.0", "rollup-plugin-license": "^3.7.0", "typescript": "^5.9.3", - "vite": "7.1.11", + "vite": "7.3.2", "vite-plugin-babel-macros": "^1.0.6", "vite-plugin-dts": "^4.5.4", "vite-plugin-externals": "^0.6.2", diff --git a/src/frontend/src/components/barcodes/BarcodeInput.tsx b/src/frontend/src/components/barcodes/BarcodeInput.tsx index 6e5d5e012b..4fa4dd03b8 100644 --- a/src/frontend/src/components/barcodes/BarcodeInput.tsx +++ b/src/frontend/src/components/barcodes/BarcodeInput.tsx @@ -13,9 +13,9 @@ import { import { IconCamera, IconScan } from '@tabler/icons-react'; import { useCallback, useMemo, useState } from 'react'; +import { Boundary } from '@lib/components/Boundary'; import { useLocalStorage } from '@mantine/hooks'; import { useGlobalSettingsState } from '../../states/SettingsStates'; -import { Boundary } from '../Boundary'; import BarcodeCameraInput from './BarcodeCameraInput'; import BarcodeKeyboardInput from './BarcodeKeyboardInput'; diff --git a/src/frontend/src/components/barcodes/QRCode.tsx b/src/frontend/src/components/barcodes/QRCode.tsx index fd8e0a1387..11155e5d8f 100644 --- a/src/frontend/src/components/barcodes/QRCode.tsx +++ b/src/frontend/src/components/barcodes/QRCode.tsx @@ -18,11 +18,11 @@ import { useQuery } from '@tanstack/react-query'; import QR from 'qrcode'; import { useCallback, useEffect, useMemo, useState } from 'react'; +import { CopyButton } from '@lib/components/CopyButton'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; import { api } from '../../App'; import { useGlobalSettingsState } from '../../states/SettingsStates'; -import { CopyButton } from '../buttons/CopyButton'; import type { QrCodeType } from '../items/ActionDropdown'; import { extractErrorMessage } from '../../functions/api'; diff --git a/src/frontend/src/components/calendar/Calendar.tsx b/src/frontend/src/components/calendar/Calendar.tsx index 50f416a175..508cdc4673 100644 --- a/src/frontend/src/components/calendar/Calendar.tsx +++ b/src/frontend/src/components/calendar/Calendar.tsx @@ -5,6 +5,7 @@ import interactionPlugin from '@fullcalendar/interaction'; import FullCalendar from '@fullcalendar/react'; import { ActionButton } from '@lib/components/ActionButton'; +import { Boundary } from '@lib/components/Boundary'; import { SearchInput } from '@lib/components/SearchInput'; import type { TableFilter } from '@lib/types/Filters'; import { t } from '@lingui/core/macro'; @@ -36,7 +37,6 @@ import { import type { CalendarState } from '../../hooks/UseCalendar'; import { useLocalState } from '../../states/LocalState'; import { FilterSelectDrawer } from '../../tables/FilterSelectDrawer'; -import { Boundary } from '../Boundary'; import { StylishText } from '../items/StylishText'; export interface InvenTreeCalendarProps extends CalendarOptions { diff --git a/src/frontend/src/components/dashboard/DashboardWidget.tsx b/src/frontend/src/components/dashboard/DashboardWidget.tsx index d56f733587..cc806d01b9 100644 --- a/src/frontend/src/components/dashboard/DashboardWidget.tsx +++ b/src/frontend/src/components/dashboard/DashboardWidget.tsx @@ -2,7 +2,7 @@ import { t } from '@lingui/core/macro'; import { ActionIcon, Box, Group, Overlay, Paper, Tooltip } from '@mantine/core'; import { IconX } from '@tabler/icons-react'; -import { Boundary } from '../Boundary'; +import { Boundary } from '@lib/components/Boundary'; import type { ModelType } from '@lib/index'; import type { JSX } from 'react'; diff --git a/src/frontend/src/components/details/Details.tsx b/src/frontend/src/components/details/Details.tsx index 9222814fa4..a55a96f489 100644 --- a/src/frontend/src/components/details/Details.tsx +++ b/src/frontend/src/components/details/Details.tsx @@ -17,6 +17,7 @@ import { getValueAtPath } from 'mantine-datatable'; import { useCallback, useMemo } from 'react'; import { useNavigate } from 'react-router-dom'; +import { CopyButton } from '@lib/components/CopyButton'; import { ProgressBar } from '@lib/components/ProgressBar'; import { YesNoButton } from '@lib/components/YesNoButton'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; @@ -29,7 +30,6 @@ import { useApi } from '../../contexts/ApiContext'; import { formatDate, formatDecimal } from '../../defaults/formatters'; import { InvenTreeIcon } from '../../functions/icons'; import { useGlobalSettingsState } from '../../states/SettingsStates'; -import { CopyButton } from '../buttons/CopyButton'; import { StylishText } from '../items/StylishText'; import { getModelInfo } from '../render/ModelType'; import { StatusRenderer } from '../render/StatusRenderer'; diff --git a/src/frontend/src/components/editors/NotesEditor.tsx b/src/frontend/src/components/editors/NotesEditor.tsx index 667cdd1ae5..afdb3d2c05 100644 --- a/src/frontend/src/components/editors/NotesEditor.tsx +++ b/src/frontend/src/components/editors/NotesEditor.tsx @@ -25,15 +25,18 @@ import { useApi } from '../../contexts/ApiContext'; export default function NotesEditor({ modelType, modelId, - editable + editable, + setDirtyCallback }: Readonly<{ modelType: ModelType; modelId: number; editable?: boolean; + setDirtyCallback?: (dirty: boolean) => void; }>) { const api = useApi(); // In addition to the editable prop, we also need to check if the user has "enabled" editing const [editing, setEditing] = useState(false); + const [localIsDirty, setLocalIsDirty] = useState(false); const [markdown, setMarkdown] = useState(''); @@ -42,6 +45,10 @@ export default function NotesEditor({ setEditing(false); }, [editable, modelId, modelType]); + useEffect(() => { + setDirtyCallback?.(localIsDirty); + }, [localIsDirty]); + const noteUrl: string = useMemo(() => { const modelInfo = ModelInformationDict[modelType]; return apiUrl(modelInfo.api_endpoint, modelId); @@ -121,6 +128,7 @@ export default function NotesEditor({ id: 'notes', autoClose: 2000 }); + setLocalIsDirty(false); }) .catch((error) => { notifications.hide('notes'); @@ -222,6 +230,7 @@ export default function NotesEditor({ getMdeInstance={(instance: SimpleMde) => setMdeInstance(instance)} onChange={(value: string) => { setMarkdown(value); + setLocalIsDirty(true); }} options={editorOptions} value={markdown} diff --git a/src/frontend/src/components/editors/TemplateEditor/TemplateEditor.tsx b/src/frontend/src/components/editors/TemplateEditor/TemplateEditor.tsx index 2cf8633136..786b4803da 100644 --- a/src/frontend/src/components/editors/TemplateEditor/TemplateEditor.tsx +++ b/src/frontend/src/components/editors/TemplateEditor/TemplateEditor.tsx @@ -25,12 +25,12 @@ import Split from '@uiw/react-split'; import type React from 'react'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { Boundary } from '@lib/components/Boundary'; import { ModelInformationDict } from '@lib/enums/ModelInformation'; import { ModelType } from '@lib/enums/ModelType'; import { apiUrl } from '@lib/functions/Api'; import { api } from '../../../App'; import type { TemplateI } from '../../../tables/settings/TemplateTable'; -import { Boundary } from '../../Boundary'; import { SplitButton } from '../../buttons/SplitButton'; import { StandaloneField } from '../../forms/StandaloneField'; diff --git a/src/frontend/src/components/forms/ApiForm.tsx b/src/frontend/src/components/forms/ApiForm.tsx index 43b2b22948..7531e9b927 100644 --- a/src/frontend/src/components/forms/ApiForm.tsx +++ b/src/frontend/src/components/forms/ApiForm.tsx @@ -22,26 +22,25 @@ import { } from 'react-hook-form'; import { type NavigateFunction, useNavigate } from 'react-router-dom'; +import { Boundary } from '@lib/components/Boundary'; import { isTrue } from '@lib/functions/Conversion'; +import { + type NestedDict, + constructFormUrl, + mapFields +} from '@lib/functions/Forms'; import { getDetailUrl } from '@lib/functions/Navigation'; +import { + invalidResponse, + showTimeoutNotification +} from '@lib/functions/Notification'; import type { ApiFormFieldSet, ApiFormFieldType, ApiFormProps } from '@lib/types/Forms'; import { useApi } from '../../contexts/ApiContext'; -import { - type NestedDict, - constructField, - constructFormUrl, - extractAvailableFields, - mapFields -} from '../../functions/forms'; -import { - invalidResponse, - showTimeoutNotification -} from '../../functions/notifications'; -import { Boundary } from '../Boundary'; +import { constructField, extractAvailableFields } from '../../functions/forms'; import { KeepFormOpenSwitch } from './KeepFormOpenSwitch'; import { ApiFormField } from './fields/ApiFormField'; diff --git a/src/frontend/src/components/forms/fields/RelatedModelField.tsx b/src/frontend/src/components/forms/fields/RelatedModelField.tsx index 9155bf3c4c..d5f0a9fcff 100644 --- a/src/frontend/src/components/forms/fields/RelatedModelField.tsx +++ b/src/frontend/src/components/forms/fields/RelatedModelField.tsx @@ -8,17 +8,32 @@ import { } from '@mantine/core'; import { useDebouncedValue, useId } from '@mantine/hooks'; import { useQuery } from '@tanstack/react-query'; -import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { + type ReactNode, + useCallback, + useEffect, + useMemo, + useRef, + useState +} from 'react'; import { type FieldValues, type UseControllerReturn, + type UseFormReturn, useFormContext } from 'react-hook-form'; import Select from 'react-select'; -import { ModelInformationDict } from '@lib/enums/ModelInformation'; +import { ActionButton } from '@lib/components/ActionButton'; +import { + ModelInformationDict, + type TranslatableModelInformationInterface +} from '@lib/enums/ModelInformation'; +import { apiUrl } from '@lib/functions/Api'; import type { ApiFormFieldType } from '@lib/types/Forms'; +import { IconPlus } from '@tabler/icons-react'; import { useApi } from '../../../contexts/ApiContext'; +import { useCreateApiFormModal } from '../../../hooks/UseForm'; import { useGlobalSettingsState, useUserSettingsState @@ -54,6 +69,10 @@ export function RelatedModelField({ // Keep track of the primary key value for this field const [pk, setPk] = useState(null); + function setValuefromPK(pk: number) { + fetchSingleField(pk); + } + // Handle condition where the form is rebuilt dynamically useEffect(() => { const value = field.value || pk; @@ -75,42 +94,55 @@ export function RelatedModelField({ const [value, setValue] = useState(''); const [searchText] = useDebouncedValue(value, 250); + // Response to fetching a single instance + const fetchSingleCallback = useCallback( + (instance: any) => { + const pk_field = definition.pk_field ?? 'pk'; + + if (instance?.[pk_field]) { + // Convert the response into the format expected by the select field + const value = { + value: instance[pk_field], + data: instance + }; + + // Run custom callback for this field (if provided) + if (definition.onValueChange) { + definition.onValueChange(instance[pk_field], instance); + } + + setInitialData(value); + dataRef.current = [value]; + setPk(instance[pk_field]); + } + }, + [definition.pk_field, definition.onValueChange, setInitialData, setPk] + ); + // Fetch a single field by primary key, using the provided API filters const fetchSingleField = useCallback( - (pk: number) => { - if (!definition?.api_url) { - return; - } - - const params = definition?.filters ?? {}; - const url = `${definition.api_url}${pk}/`; - - api - .get(url, { - params: params - }) - .then((response) => { - const pk_field = definition.pk_field ?? 'pk'; - if (response.data?.[pk_field]) { - const value = { - value: response.data[pk_field], - data: response.data - }; - - // Run custom callback for this field (if provided) - if (definition.onValueChange) { - definition.onValueChange(response.data[pk_field], response.data); - } - - setInitialData(value); - dataRef.current = [value]; - setPk(response.data[pk_field]); - } + (pk: number | string) => { + if (definition.singleFetchFunction) { + definition.singleFetchFunction(pk)?.then((instance: any) => { + fetchSingleCallback(instance); }); + } else if (!!definition.api_url) { + const params = definition?.filters ?? {}; + const url = `${definition.api_url}${pk}/`; + api.get(url, { params: params }).then((response) => { + const instance = response.data; + fetchSingleCallback(instance); + }); + } else { + console.error( + `No API URL provided for related field ${fieldName}, cannot fetch data` + ); + } }, [ definition.api_url, definition.filters, + definition.singleFetchFunction, definition.onValueChange, definition.pk_field, setValue, @@ -126,6 +158,17 @@ export function RelatedModelField({ return ModelInformationDict[definition.model]; }, [definition.model]); + // Determine whether an add button should be added for this field + const addButton = useMemo(() => { + if (!modelInfo) { + return false; + } + if (definition.addCreateFields) { + return true; + } + return false; + }, [definition.addCreateFields, modelInfo]); + // Determine whether a barcode field should be added const addBarcodeField: boolean = useMemo(() => { if (!modelInfo || !modelInfo.supports_barcode) { @@ -283,15 +326,7 @@ export function RelatedModelField({ return null; } - let _filters = definition.filters ?? {}; - - if (definition.adjustFilters) { - _filters = - definition.adjustFilters({ - filters: _filters, - data: form.getValues() - }) ?? _filters; - } + const _filters = retrieveFilters(definition, form); // If the filters have changed, clear the data if (JSON.stringify(_filters) !== JSON.stringify(filters)) { @@ -448,6 +483,9 @@ export function RelatedModelField({ styles={{ description: { paddingBottom: '5px' } }} > + {addButton && + modelInfo && + InlineCreateButton(definition, modelInfo, form, setValuefromPK)}